学习epoll有一段时间了,最近终于有一个服务器采用了epoll模型,从中积累了一些epoll的资料.个人感觉目前可以找到的epoll相关的资料太少了,因为epoll仅被linux 2.6以上版本内核所支持,它的应用时间还比较短暂, 而一些讲解网络编程的相关权威书籍(如已逝的stevens的UNP)都没有讲解这个不能跨unix平台的专有技术,而epoll带来的巨大效率提高又使得这项技术很有吸引力, 于是我决定将个人遇到的epoll相关问题整理一下, 随着对epoll的理解深入, 这份资料将不断的完善下去.
需要说明的是, 这份教材不适合网络编程的初学者, 这里假设读者具备一定的网络编程基础, 使用过多路复用IO如select等.
1) 能不能给一个使用epoll相关API进行IO监控的示例?
在<<
epoll学习笔记>>中有一个简单的示例说明epoll相关API的使用, 但是这个示例是非常简单的, 它仅仅关注于如何使用epoll相关函数上面, 如果要更好的使用epoll, 还需要自己动手以及阅读资料.
2) epoll和select都属于多路复用IO吗?与阻塞IO相比多路复用IO有什么优点?
在<<
epoll为什么这么快>>, 重点是解释epoll对比select在效率上提高的原因, 但是同时也解释了多路复用IO的工作原理.
3) epoll的ET模式和LT模型有什么区别?
<<
epll学习笔记>>通过一个实例说明了两者之间的差异, 但是我想, 如果结合着man文档(man epoll)来看效果会更好些.
4) 我的服务器是采用多进程模型的, 我的父进程首先创建了epoll所使用的fd, 然后再创建子进程, 为什么使用的时候没过多久epoll_wait函数就一直返回0, 这样IO事件就不会得到通知了?
太巧了, 笔者也遇到过类似的问题, 花了好几天的时间进行调试, 很幸运的是, 你不必像我这样耗费时间在这个问题上面了, 因为在<<
多进程服务器中,epoll的创建应该在创建子进程之后>>中已经有了解答.
5)epoll的效率比起select来有很大的提高, 这里面有什么秘密吗?
其实原理很简单, 就是计算机世界中"空间换时间"思想的体现, 在<<
epoll为什么这么快>>中有详细的解释.