转:[译] Linux 异步 I_O 框架 io_uring:基本原理、程序示例与性能压测(2020)
新一代异步IO框架 io_uring | 得物技术
干翻 nio ,王炸 io_uring 来了 !!(图解+史上最全)
io_uring vs epoll ,谁在网络编程领域更胜一筹?-阿里云开发者社区
应用线程通过mmap 机制更新SQ 来提交 SQE,以及监控 CQ 的完成状态,应用无需任何系统调用,就能提交和收割 I/O(submit and reap I/Os)。如果内核线程的空闲时间超过了用户的配置值,它会通知应用,然后进入 idle 状态。这种情况下,应用必须调用 io_uring_enter()
来唤醒内核线程。如果 I/O 一直很繁忙,内核线程是不会 sleep 的。在日常的使用中一般建议选择后两种轮训模式,用户线程轮存在用户态到内核态的切换,相比内核轮询存在一定的性能损耗;io_uring 之所以能达到超高性能的原因主要在以下几个方面:
- Mmap 机制减少了 内存复制
- 内核轮询模式下,没有用户态和内核态的切换降低了损耗
- 基于SQ和CQ 机制下的数据竞争消除,即没有并发竞争损耗