天道酬勤,学无止境

epoll事件

epoll事件处理机制详解

Linux I/O多路复用技术在比较多的TCP网络服务器中有使用,即比较多的用到select函数。Linux 2.6内核中有提高网络I/O性能的新方法,即epoll 。 1、为什么select落后 首先,在Linux内核中,select所用到的FD_SET是有限的,即内核中有个参数__FD_SETSIZE定义了每个FD_SET的句柄个数,在我用的2.6.15-25-386内核中,该值是1024,搜索内核源代码得到: include/linux/posix_types.h: #define __FD_SETSIZE 1024 也就是说,如果想要同时检测1025个句柄的可读状态是不可能用select实现的。或者同时检测1025个句柄的可写状态也是不可能的。其次,内核中实现select是使用轮询方法,即每次检测都会遍历所有FD_SET中的句柄,显然,select函数的执行时间与FD_SET中句柄的个数有一个比例关系,即select要检测的句柄数越多就会越费时。当然,在前文中我并没有提及poll方法,事实上用select的朋友一定也试过poll,我个人觉得select和poll大同小异,个人偏好于用select而已。 2、内核中提高I/O性能的新方法 epoll epoll是什么?按照man手册的说法:是为处理大批量句柄而作了改进的poll。要使用epoll只需要以下的三个系统函数调用

2021-03-26 19:12:32    分类:博客    epoll机制   epoll详解   epoll事件