1 个回答

Linux 下有两种常见的 AIO,一个是 C 标准库里的 POSIX AIO(即 glibc_aio),一个是 Linux 内核提供的 Native AIO(即 libaio)。

其中前者是是用 pthread 模拟实现的,也就是多线程。那问题来了,要是多线程能解决问题,我干嘛还要用多线程模拟 AIO?那不是性能更差吗?

而后者在 Linux Kernel 2.6 被引入,目前只支持 Direct I/O,剩下的还在修 Bug 中……之所以很多 feature 和 bugfix 迟迟没被合并进主线里,我觉得主要原因是 Linux 上对 AIO 的使用不是很迫切,毕竟对于网络 I/O 而言 epoll 已经够用了。

不过估计吧有生之年是修不完了。因为 Linux Kernel 5.1 以后又引入了新的 AIO 方式 —— io_uring,不过似乎没听说哪个主流开源项目用到了它,毕竟还是个新玩意儿,历史包袱没那么容易动的。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题