这两天看了看epoll这东西,被吹的神乎的东西。我觉得并没有什么用途,并不能和Windows上的完成端口等同而论。本质上这东西和poll,select差不多的东西,都是在FDSET中有事件发生时返回,在返回的FDSET中指明可以无阻塞完成的事件,由应用程序进行相应的处理。属于同步IO的概念。
唯一的好处是,epoll代替用户维护FDSET而已。提供了个维护FDSET的函数。也就算是在poll和select上的改进吧。
epoll提供的边沿出发的机制,理论上可以提高服务期的性能。不过由此造成的代码设计复杂。
至于绑定用户数据指针的方式,也很容易实现,Linux的FD基本是一个从零开始的int做个数组就轻易解决了。在一个主要维护TCP连接的服务器中也用途不大。如果还用到大量的其它FD还有些用途,节省点内存而已。
对于完成端口对线程使用的优化这里根本就没有。而且在wait_epoll的线程中阻塞的话,必然影响其他用户。对于会阻塞的操作,还得使用另外的线程池,自己进行控制。我觉得没有完成端口对线程的处理好。
完成端口使用的是异步方式,在操作完成的时候,数据已经复制到了用户提交的内存中了。可见epoll较之完成端口,至少要多一次系统调用。不过也有人说这是优点,功能单一,设计更为合理。
libevent - an event notification library<
加载中,请稍候......