Chinaunix首页 | 论坛 | 博客
  • 博客访问: 645243
  • 博文数量: 108
  • 博客积分: 3236
  • 博客等级: 中校
  • 技术积分: 906
  • 用 户 组: 普通用户
  • 注册时间: 2010-05-04 21:23
文章分类

全部博文(108)

文章存档

2011年(33)

2010年(75)

我的朋友

分类: C/C++

2011-01-17 18:00:57

epoll相关资料整理

学习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为什么这么快
>>中有详细的解释.
阅读(776) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~