博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于epoll边缘触发模式(ET)下的EPOLLOUT触发
阅读量:4189 次
发布时间:2019-05-26

本文共 654 字,大约阅读时间需要 2 分钟。

ET模式下,EPOLLOUT触发条件有:

1.缓冲区满-->缓冲区非满;

2.同时监听EPOLLOUT和EPOLLIN事件 时,当有IN 事件发生,都会顺带一个OUT事件;

3.一个客户端connect过来,accept成功后会触发一次OUT事件。

其中2最令人费解,内核代码这块有注释,说是一般有IN 时候都能OUT,就顺带一个,多给了个事件。。

以上,当只监听IN事件,读完数据后改为监听OUT事件,有时候会发现触发OUT事件并不方便,想要强制触发,可以重新设置一次要监听的events,带上EPOLLOUT即可。

另:

  1. 一道腾讯后台开发的面试题
    使用Linux epoll模型,水平触发模式;当socket可写时,会不停的触发socket可写的事件,如何处理?

    第一种最普遍的方式:
    需要向socket写数据的时候才把socket加入epoll,等待可写事件。
    接受到可写事件后,调用write或者send发送数据。
    当所有数据都写完后,把socket移出epoll。

    这种方式的缺点是,即使发送很少的数据,也要把socket加入epoll,写完后在移出epoll,有一定操作代价。

    一种改进的方式:
    开始不把socket加入epoll,需要向socket写数据的时候,直接调用write或者send发送数据。如果返回EAGAIN,把socket加入epoll,在epoll的驱动下写数据,全部数据发送完毕后,再移出epoll。

    这种方式的优点是:数据不多的时候可以避免epoll的事件处理,提高效率。

转载地址:http://mysoi.baihongyu.com/

你可能感兴趣的文章
原生JS的(可视区域,向上滚动向下滚动两种)图片懒加载
查看>>
使用VMware搭建Hadoop集群虚拟网络配置
查看>>
解决vmware下拷贝主机后不识别eth0网卡
查看>>
Promise简单实践
查看>>
vue中无缝轮播简单实现
查看>>
ES5和ES6中的类定义区别
查看>>
利用解构赋值快速提取对象参数
查看>>
CSS3简单实现360deg旋转
查看>>
vue中使用H5的audio
查看>>
PHPStorm配置ESlint检查代码
查看>>
树的子结构
查看>>
判断两棵二叉树是否相似
查看>>
二叉树中和为某一值的路径
查看>>
数字在排序数组中出现的次数
查看>>
两个链表的第一个公共结点
查看>>
二叉树的深度
查看>>
MySQL数据库入门(三)
查看>>
MySQL数据库入门(四)
查看>>
关于方法覆盖和属性覆盖的问题?
查看>>
JAVA中ListIterator和Iterator详解
查看>>