【事件通知机制epoll】 epoll - I/O event notification facility 水平触发以及边缘触发存在的问题?

1 背景:分析epoll系统调用

2 工具:

使用strace分析 zk 客户端连接时,server发生的系统调用

bin/zkCli.sh -server 172.16.208.137:2181 和zkserver连接以后

3  监控分析过程:

3.1 连接事件如下

0

0

0

 3.2 对于epoll_data疑惑:

0

3.3 op类型

0

3.4 events:(边缘处罚和水平出发,默认是level Triggerd)

0

 3.5 查看man手册第七部分 man 7 epoll

0

 注意:默认使用EPOLLLT,边缘触发存在的问题,pipe reader 可能读取不完整,接收端没有收到完整的数据在第5步wait,但是服务端也在等待回应,导致双方都hang主。

           解决方案: nio + read/write return EAGAIN

3.7 zk_clinent 每隔10秒发一次心跳

3.8  心跳事件如下

0

3.9  断开连接

0

 

4 小结:

  1 分析工具 strace man手册

  2 epoll 参数

  3 边缘,水平触发的区别,以及存在的问题和解决方案

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页