eventfd -- 2




概述在下面两篇日志中,我们详细介绍了 linux 异步 IO 的两种实现:POSIX AIO -- glibc 版本异步 IO 简介 linux AIO -- libaio 实现的异步 IO 简介及实现原理 在文章中,我们清楚 libaio 实现的异步 IO 需要 linux 内核版本支持,然而,他却比 glibc 实现的异步 IO 具有很多优势,如资源使用上、执行效率上以及设备的协调使用等方面均有着明显的优势无论如何,他毕竟是 linux 内核原生支持的异步 IO 嘛也因此,nginx 选择了 libaio 实现的异步 IO 实现事件的异步处理,那么他是怎么做的呢? 异步 IO 初始化 -- ngx_epoll_aio_initngx_epoll_aio_init 函数是 nginx epoll 模块初始化的一个重要环节,他决定了 nginx 是否使用异步 IO 来实现事件的读写响应// static void ngx_epo
#linux    #龙潭书斋    #apue    #posix   
概述阅读 nginx 源码接触到了一个新的系统调用 -- eventfdeventfd 系统调用是 linux 2.6 以上版本用来在用户空间创建可以用来作为事件等待、通知的文件描述符简单地说,就是可以在用户态应用中建立一个内核态到用户态的通知机制,这在异步 IO 的使用中非常有用但是该调用必须工作在 64 位环境下 函数原型int eventfd(unsigned int intval, int flag); 定义于 sys/eventfd.h 中调用成功返回文件描述符,调用失败,返回 -1 参数 flag 说明通过按位或运算可以使用以下一个或多个标识:eventfd 系统调用 flag 参数取值取值说明EFD_CLOEXEC类似于 open 系统调用的 O_CLOEXEC 标识,一旦 exec 执行后,关闭所有 fdEFD_NONBLOCK非阻塞调用EFD_SEMAPHORE以信号方式处理文件描述符,linux 2.6.26 以上版本将不支持 用法关于该系统调用的实际用法,可以参看 nginx 中的相应代码 var CODE_DIVS=[{"
#技术帖    #linux    #unix    #文件描述符   



京ICP备15018585号