现在我程序的架构,epoll线程等待事件触发,然后将事件放到一个队列当中,通知工作线程开始工作。几个工作线程顺序取走事件,并做处理。 假设我的程序逻辑只是简单的转发,从一端读取,从另一端发走,唯一的要求就是严格按顺序收发。 现在遇到这样一个问题,假设只有一条连接的时候,连续触发的可读事件都是同一个fd, 那几个工作线程同时读一个fd,可能造成数据顺序改变。比如4个线程,缓冲区大小都是1500,read的时候这1500字节的...
by berniechen - C/C++ - 2009-08-26 15:28:04 阅读(4710) 回复(6)
Linux 2.6内核中提高网络I/O性能的新方法-epoll I/O多路复用技术在比较多的TCP网络服务器中有使用,即比较多的用到select函数。 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个句柄...
Linux的epoll模型 Linux 2.6内核中提高网络I/O性能的新方法-epoll I/O多路复用技术在比较多的TCP网络服务器中有使用,即比较多的用到select函数。 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 也就是说...
epoll 事件的检测 1.。。 epoll 事件中发现 就epollIN , epollOUT , epollPRI可以用. epollERR 和 epollHUP什么情况下才能监测出这种问题啊. 我的内核是2.6.20 可是用epollRDHUP的时候编译包错. RecvMessThread.cpp:48: error: ‘epollRDHUP’ was not declared in this scope 2.。。 1、listen fd,有新连接请求,触发epollIN。 2、对端发送普通数据,触发epollIN。 3、带外数据,只触发epollPRI。 4、对端正常关闭(程序里close(...
在epoll的ET模式下,有时会发生如下的问题 1. epoll触发FD=A的事件 。 2.处理FD=A的事件并销毁A(即epoll_ctl_del(A)并close(A) ) 。 3.epoll再次触发FD=A的事件 。 如果这时候对象已经被删除或被重用,程序就会出现问题 。 哪位大侠解释下,不胜感激。
epoll 事件中发现 就epollIN , epollOUT , epollPRI可以用. epollERR 和 epollHUP什么情况下才能监测出这种问题啊. 我的内核是2.6.20 可是用epollRDHUP的时候编译包错. RecvMessThread.cpp:48: error: ‘epollRDHUP’ was not declared in this scope 请问还的include什么头文件啊... 谢谢了啊.
epoll模型有两种工作模式,ET和LT,两种模式下都有一些细节值得注意,以下是一些思考: 一、ET模式下 Q1: 调用accept时,到底TCP完成队列里有多少个已经建立好的连接? 这里又得分情况来说: 没有连接。这种情况发生在TCP连接被客户端夭折,即在服务端调用accept之前客户端给出一个RST。该RST导致刚刚建立好的连接从服务器端的TCP完成队列中被移出。源自berkeley的实现会在内核处理该事件,并不会将该事件通知给服务程序,如果套接口...