码迷,mamicode.com
首页 > 编程语言 > 详细

线程组 NioEventLoopGroup

时间:2020-01-19 11:03:58      阅读:90      评论:0      收藏:0      [点我收藏+]

标签:mic   数据   pre   tor   cut   inf   有一个   executor   设计   

一、EventLoop和EventLoopGroup

EventLoop如同它的名字,它是一个无限循环(Loop),在循环中不断处理接收到的事件(Event)。

Netty线程模型的基石是建立在EventLoop上的,从设计上来看,EventLoop采用了一种协同设计,它建立在两个基本的API之上:Concurrent和Channel,也就是并发和网络。并发是因为它采用了线程池来管理大量的任务,并且这些任务可以并发的执行。其继承了EventExecutor接口,而EventExecutor就是一个事件的执行器。另外为了与Channel的事件进行交互,EventLoop继承了EventLoopGroup接口。一个详细的EventLoop类继承层次结构如下:

技术图片

二、NioEventLoopGroup

一个Netty服务端启动时,通常会有两个NioEventLoopGroup:一个是监听线程组,主要是监听客户端请求,另一个是工作线程组,主要是处理与客户端的数据通讯。

NioEventLoopGroup bossGroup = new NioEventLoopGroup();
NioEventLoopGroup workerGroup = new NioEventLoopGroup();

Netty客户端只有一个NioEventLoopGroup,就是用来处理与服务端通信的线程组。

NioEventLoopGroup workerGroup = new NioEventLoopGroup();

NioEventLoopGroup可以理解为一个线程池,内部维护了一组线程,每个线程负责处理多个Channel上的事件,而一个Channel只对应于一个线程,这样可以回避多线程下的数据同步问题。NioEventLoopGroup的类图如下:

技术图片

 

线程组 NioEventLoopGroup

标签:mic   数据   pre   tor   cut   inf   有一个   executor   设计   

原文地址:https://www.cnblogs.com/myitnews/p/12212796.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!