Epoll ET模型下,为什么每次EPOLLIN事件都会带一次EPOLLOUT事件?

笑Smile3721 2013-10-31 09:33:04
RT
我注册事件有:EPOLLIN | EPOLLOUT | EPOLLET | EPOLLRDHUP

...全文
592 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
heartlesstoanyone 2013-11-02
  • 打赏
  • 举报
回复
man有时候也讲不到。对使用非阻塞模式主动建立的连接(对外),你怎么知道这个socket已就绪?connect之后,一并注册IN和OUT,有OUT时,你才知道它就绪了;对进来的连接,肯定是可写的,可以在写到EAGAIN时,才注册OUT。 还是那句,如果你想统一由EPOLL触发的收发的话,收好理解,发,就要自己主动触发OUT事件了,OUT+MOD。
笑Smile3721 2013-11-01
  • 打赏
  • 举报
回复
ET模型下不是缓冲区由写变为不可写的时候EPOLLOUT才返回吗?我这个写不是总是返回的,而是有EPOLLIN 的时候才会带一次。man手册里面这样说 When used as an edge-triggered interface, for performance reasons, it is possible to add the file descriptor inside the epoll inter‐face (EPOLL_CTL_ADD) once by specifying (EPOLLIN|EPOLLOUT). This allows you to avoid continuously switching between EPOLLIN and EPOLLOUT calling epoll_ctl(2) with EPOLL_CTL_MOD. 难道我理解错了?
Carl_CCC 2013-11-01
  • 打赏
  • 举报
回复
一般情况下你不要带EPOLLOUT事件,因为一般都是可写的,EPOLLOUT会不停的弹出,你要写的时候在注册。
c1g2y3cgy 2013-11-01
  • 打赏
  • 举报
回复
这个问题都话最好取看man手册,
笑Smile3721 2013-11-01
  • 打赏
  • 举报
回复
引用 3 楼 heartlesstoanyone 的回复:
实际跑过,没有遇到你说的可读时也有OUT事件的产生。在注册上之后,产生了一次EPOLLOUT,之后,只有当不可写变为可写时,才产生EPOLLOUT。我这边实际当中还未遇到发不出去而需要EPOLLOUT的情形。通常是我要主动去发,才MOD EPOLLOUT,主动触发,然后去send/write。
http://comments.gmane.org/gmane.linux.kernel.api/2406看了这个文章,有我类似的情况,网上还可以找到很多。我现在的做法是写到EAGAIN 再MOD EPOLLOUT 发完有弄回来。这样咋跟man里面说的不一致,牙疼
heartlesstoanyone 2013-11-01
  • 打赏
  • 举报
回复
实际跑过,没有遇到你说的可读时也有OUT事件的产生。在注册上之后,产生了一次EPOLLOUT,之后,只有当不可写变为可写时,才产生EPOLLOUT。我这边实际当中还未遇到发不出去而需要EPOLLOUT的情形。通常是我要主动去发,才MOD EPOLLOUT,主动触发,然后去send/write。
内容简介: 本课程以通俗易懂的方式讲解Nginx技术,课程内容包括:1.Nginx简介、安装Nginx 2. 配置服务器 3.反向代理 4.负载均衡 5.动静分离为什么需要Nginx? Nginx轻量级,采用 C 进行编写,同样的 web 服务,占用更少的内存及资源抗并发,nginx 以 epoll and kqueue 作为开发模型,处理请求是异步非阻塞的,负载能力比 apache 高很多,而 apache 则是阻塞型的。在高并发下 nginx 能保持低资源低消耗高性能 ,而 apache 在 PHP 处理慢或者前端压力很大的情况下,很容易出现进程数飙升,从而拒绝服务的现象。nginx 处理静态文件好,静态处理性能比 apache 高三倍以上。nginx 的设计高度模块化,编写模块相对简单。nginx 配置简洁,正则配置让很多事情变得简单,而且改完配置能使用 -t 测试配置有没有问题,apache 配置复杂 ,重启的时候发现配置出错了,很崩溃。nginx 作为负载均衡服务器,支持 7 层负载均衡。nginx 本身就是一个反向代理服务器,而且可以作为非常优秀的邮件代理服务器启动特别容易, 并且几乎可以做到 7*24 不间断运行,即使运行数个月也不需要重新启动,还能够不间断服务的情况下进行软件版本的升级。社区活跃,各种高性能模块出品迅速。课程大纲: 为了让大家快速系统了解Nginx知识全貌,我为你总结了「Nginx技术框架图」,帮你梳理学习重点,建议收藏!!

23,127

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧