由于调用系统调用时,会从用户态切换到内核态,从而进行上下文切换,而上下文切换会消耗一定的 CPU 时间。
io_uring
为了减少或者摒弃系统调用,采用了用户态与内核态 共享内存
的方式来通信。
-
第一步:应用程序通过向
io_uring
的提交队列
提交 I/O 操作。 -
第二步:SQ内核线程从
提交队列
中读取 I/O 操作。 -
第三步:SQ内核线程发起 I/O 请求。
-
第四步:I/O 请求完成后,SQ内核线程会将 I/O 请求的结果写入到
io_uring
的完成队列
中。 -
第五步:应用程序可以通过从
完成队列
中读取到 I/O 操作的结果。