Netty EpollEventLoopGroup

阅读数:104 评论数:0

跳转到新版页面

分类

python/Java

正文

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

 

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就算废了。




相关推荐

Netty提供了丰富的解码器抽象基类:主要分为两类: (1)解码字节到消息(ByteToMessageDecoder和ReplayingDecoder) (2)解码消

一、概述 Netty的强大的地方,是他能方便的实现自定义协议的网络传输。Netty基于Reactor模式:http://1024s.top/mbstudy/mbBlog/blogDetail?blog

netty提供了6种不同的websocket类型: (1)BinaryWebsocketFrame,二进制数据类型 (2)TextWebSocketFrame,文本数

一、概述 在计算机中,我们以字节为单位,一个字节为8bit。 而数据存储中的字节顺序多取决于硬件设计,即所谓的大端存储和小端存储。Intel处理器使用小端存储,PowerPc的处理器采用大端存储。 当

一、Channel的四大类型 1、FileChannel FileChannel是操作文件的Channel,可以通过FileChannel从一个文件中读取数据,也

ByteBuf是对字节的封装,有基于堆内存和直接内存。若是堆内存,应用程序无需考虑什么时候释放,因为GC是帮助做,如果是直接内存,那么需要主动释放。 每个ByteBuf对象都有一个引用计数,当这个数值

Netty中的HashedWheelTimer可以用于提交延迟任务,Java里的Time组件也具备相同的功能,不过Time是基于执行是基于优先队列实现的,相当于需要对所有的任务基于执行的时间排个

一、netty客户端流控 1、这几种情况下,如果客户端没有流控保护,很容易发生内存泄露。 (1)网络瓶颈,当客户端发送速度超过网络链路处理能力,会导致客户端发送队列积压。 (2)当对端读取速度小于已方

LineBasedFrameDecoder以换行符\n或\r\n作为依据,遇到\r\n都认为是一条完整的消息。 而DelimiterBasedFrameDecoder允许我们指定任

HttpServerCodec HtttpServerCodec只能处理像http get的请求,也就是数据带在url问号后面的http请求。 GET请求包括两部