epoll要点

    总结一下个人对epoll使用的一些观点与体会 

    1、epoll的ET模式。在lighttpd里是不使用ET模式的,至于是什么原因,在源代码里有一个注释说明,本人也不是很理解。

         (1)epoll的使用要注意的是事件不重发,这时要注意在recv的时候,要不停的去读(会导致另一个大请求问题见下面的(2)),直到返回的已读长度小于你业务上要读的长度,或者返回-1,而errno==EAGAIN,这时表明socket缓存里已经没有数据了。

         (2)在(1)里描述的不停的去读,当读操作比对端发送数据的慢,那么将导致永远不停的去读数据,其他SOCKET上的事件将得不到处理。解决办法有两个,一个是在socket关联的属性里标记未读完,腾出cpu时间,等某个时刻再去读取,让其他socket有机会被处理;

另一个办法是启动一个线程专门处理这个socket操作。

     2、当只有一个线程实现reactor模式的时候,个人的观点是读操作应该是非阻塞的,而且是要在逻辑上把每个连接应该有两个缓存队列,一个用于存读到的数据,一个用于存要写的数据,一般情况下也可以简化缓存队列,用一个小buffer只做一次读写缓存。这样才能避免由于慢的客户网络会阻塞CPU,导致其他socket事件没有机会被处理。这个不单单是epoll的时候要考虑,其他跟IO有关的读写问题,也是要考虑的。

     3、int epoll_create(int size) 这个函数的size在linux里其实没有意义,linux内核会自动管理size,但可以作为业务存储的fd数组的大小。

     未完~~~

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值