Linux Asynch IO - aio.h和libaio.h之间的区别

Abr*_*ile 8 sockets linux asynchronous linux-kernel

我已经开始研究一种我不知道在Linux中称为asynch IO的新范例.

我的目标是使用异步IO目标套接字来编写高性能的高效服务器.原因是我的应用程序是IO绑定的.

在搜索更多信息时,我遇到了以下两个介绍.

  1. Posix AIO

  2. Linux AIO接口

在异步框架中,我想避免的情况是为每个需要异步处理的通知创建一个新线程,因为它会终止我的应用程序.

我的问题如下:

  1. 这两个框架的幕后工作是否解决了这个问题?

  2. 如果是的话,你会建议考虑插座吗?

问候

AFG

Dam*_*mon 8

这些都不是真正用于套接字的.

POSIX AIO接口创建使用常规阻塞IO的线程.它们使用缓冲区缓存,原则上应该使用套接字(虽然我承认没有尝试).

Linux内核AIO接口不会创建处理请求的线程.它在"无缓冲"模式下工作.请注意非显而易见的行为,例如在某些情况下提交请求时阻止,您既不能预见也不能阻止(也不知道除了您的程序"非常奇怪").

你想要的是非阻塞套接字(非阻塞套接字是"一种异步")并将epoll准备就绪通知的开销降至最低,并且 - 如果你能找出几乎不存在的文档 - splicevmsplice减少IO高架.使用splice/ vmsplice你可以直接从磁盘DMA到内核缓冲区并从那里推送到网络堆栈.或者,您可以直接将页面从应用程序的地址空间移动到内核,然后推送到网络.
缺点是文档稀疏(至少可以说),特别是TCP,一些问题仍未得到解决,例如,当回收内存安全时.