Netty EpollEventLoopGroup

https://blog.csdn.net/alex_xfboy/article/details/89643638

Java NIO根据操作系统不同,比如macosx是KQueueSelectorProvider、windows有WindowsSelectorProvider、Linux有EPollSelectorProvider或PollSelectorProvider,可见不同的系统对nio的selector有不同的实现。

Oracle jdk会自动选择合适的Selector,为什么Netty还要提供一个基于epoll的实现呢?

(1)Netty的epoll transport使用edge-triggered,而javar的nio使用level-triggered.

(2)Netty的epoll transport暴漏了更多的nio没有的配置参数。

(3)c代码,更少gc,更少synchronized

https://blog.csdn.net/xiaoqi030611a/article/details/8820875

epoll两种模式:

1、ET(Edge Triggered)

每当状态变化时发生一个io事件。

2、LT(Level Triggered),水平解发/条件触发

只要满足条件,就触发一个事件(只要有数据没有被获取,内核就不断通知你)。

举个读socket的例子,假定经过长时间的沉默后,现在来了100个字节,这时无论边缘触发还是水平触发都会产生一个read ready notification通知应用程序可读。应用程序读了50个字节,然后重新调用api等待io事件。这时条件触发的api会因为还有50个字节可读,而立即返回用户一个read ready notification。而边缘触发的api会因为可读这个状态没有发生变化而长期等待。因此在使用边缘触发的api时,要注意每次都要读到socket返回EWOULDBLOCK为止,否则这个socket就算废了。

你可能感兴趣的:(数据通信与计算机网络)