从Java NIO到Netty(六)

164 阅读1分钟

Netty 组件介绍

EventLoop

在《Java NIO到Netty(四)》中,可以看到,我们把ServerSocketChannel和SocketChannel均注册到一个Selector中,这个Selector在while循环中不断轮询检查是否有Channel准备好事件,如下图所示

image.png

从上图中可以看到不管是监听是否有新的连接还是对Socket进行读写均在一个线程下完成的。
那么EventLoop也可以简单理解为是一个线程,其内部和一个Selector做了绑定,用于处理连接和读写事件等。
我们回到代码(1)处

EventLoopGroup bossGroup = new NioEventLoopGroup(); 
EventLoopGroup workerGroup = new NioEventLoopGroup();
...
b.group(bossGroup, workerGroup)

这里我们是设置了两个EventLoop线程组,并设置到ServerBootstrap中。其中bossGroup是专门负责接口连接请求的也就是处理OP_ACCEPT事件,workerGroup专门用于处理I/O操作也就是OP_READ事件。可以用下图来表示:

image.png