当前位置:首页 > 开发 > 操作系统 > 正文

epoll的ET和LT两种模式对比及注意事项

发表于: 2013-09-01   作者:chuqingq   来源:转载   浏览次数:
摘要: ET模式: 因为ET模式只有从unavailable到available才会触发,所以 1、读事件:需要使用while循环读取完,一般是读到EAGAIN,也可以读到返回值小于缓冲区大小; 如果应用层读缓冲区满:那就需要应用层自行标记,解决OS不再通知可读的问题 2、写事件:需要使用while循环写到EAGAIN,也可以写到返回值小于缓冲区大小 如果应用层写缓冲区空(无内容可写):那就需要

ET模式:

因为ET模式只有从unavailable到available才会触发,所以

1、读事件:需要使用while循环读取完,一般是读到EAGAIN,也可以读到返回值小于缓冲区大小;

如果应用层读缓冲区满:那就需要应用层自行标记,解决OS不再通知可读的问题

2、写事件:需要使用while循环写到EAGAIN,也可以写到返回值小于缓冲区大小

如果应用层写缓冲区空(无内容可写):那就需要应用层自行标记,解决OS不再通知可写的问题。

 

LT模式:

因为LT模式只要available就会触发,所以:

1、读事件:因为一般应用层的逻辑是“来了就能读”,所以一般没有问题,无需while循环读取到EAGAIN;

如果应用层读缓冲区满:就会经常触发,解决方式如下;

2、写事件:如果没有内容要写,就会经常触发,解决方式如下。

 

LT经常触发读写事件的解决办法:修改fd的注册事件,或者把fd移出epollfd。

 

总结:

目前好像还是LT方式应用较多,包括redis、libuv等。(nginx使用ET)

LT模式的优点在于:事件循环处理比较简单,无需关注应用层是否有缓冲或缓冲区是否满,只管上报事件。缺点是:可能经常上报,可能影响性能。

 

epoll的ET和LT两种模式对比及注意事项

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
在一个非阻塞的socket上调用read/write函数, 返回EAGAIN或者EWOULDBLOCK(注: EAGAIN就是EWOULDBLOCK
在一个非阻塞的socket上调用read/write函数, 返回EAGAIN或者EWOULDBLOCK(注: EAGAIN就是EWOULDBLOCK
1 #include <sys/types.h> 2 #include <sys/socket.h> 3 #include <netinet/in.h>
可读可写状态 1.下列四个条件中的任何一个满足时,一个套接口准备好读: a.该套接口接收缓冲区中的
5 epoll
概述 epoll 是 linux 内核为处理大批量文件描述符而对 poll 进行的改进版本,是 linux 下多路复用 I
JTAG模式与SWD模式连接图 SWD 仿真模式概念简述 一、SWD 和传统的调试方式区别 1. SWD 模式比 JTAG
前言 网络服务在处理数以万计的客户端连接时,往往出现效率低下甚至完全瘫痪,这被 称为 C10K 问题。C
流量预警和限流方案中,比较常用的有两种。第一种滑窗模式,通过统计一段时间内的访问次数来进行控
以下两种模式都可以用于实现线程池 模式1由各个Worker线程自己负责从TaskPool中获取Task。 模式2由1
关于动画的实现,Android提供了Animation,在Android SDK介绍了2种Animation模式: 1. Tween Animat
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号