重新审视"你如何一起使用aio和epoll"

use*_*419 11 posix epoll aio kqueue

如何在单个事件循环中一起使用AIO和epoll的讨论之后.

实际上Linux中有2个"aio"API.有一个POSIX aio(aio_*系列函数),包含在glibc和libaio开发中我相信RedHat(?),io_*系列.

第一个允许通过aio_sigevent aiocb成员注册通知请求.这可以很容易地与ppoll()/ pselect()事件循环集成.如果你想将POSIX aio与epoll()集成,那么你需要将信号转换为虚拟fd(管道可能)上的事件并用epoll监听它,同时以经典方式或使用ppoll /捕获信号选择.第一选择(正常的sighandlers)的安全性取决于应用.也许在epoll上,但我并不完全了解它的内部结构.我可以安全地假设,如果我有一个基于epoll的应用程序,并且我想添加POSIX aio支持,那么我搞砸了?这是我的问题.

第二个AIO实现libaio - 可以与eventfd()一起使用(struct iocb具有aio_resfd成员,该成员预期为零或者eventfd用于提供AIO结果).但这不是书.指定POSIX,即.

我梦想自己是一个*BSD用户,一切都很清楚.您对AIO事件有POSIX AIO和kqueue()支持.晶莹剔透.像许多其他的东西.

Spu*_*d86 6

请注意,您可以使用带有epoll的POSIX aio,signalfd(2)它会创建一个文件描述符,然后您可以使用它来通知基于epoll的循环中的信号.

另外第二个aio API应该最终成为glibc基于它的POSIX aio实现的基础,它还没有完全存在......(我不知道是否有人正在研究它)