Netty学习5之Netty模型详细版

看图

详细版本模型

名词解读

概述

Netty抽象(抽离)出俩组线程池;
例如,在BossGroup下面,有很多的子线程.
每一个线程池中,会有一个NioEventLoop线程.

BossGroup

负责接收客户端的连接.

WorkerGroup

负责网络的读写

BossGroup和WorkerGroup类型都为 NioEventGroupLoop类型

NioEventGroupLoop

1. NioEventGroupLoop:事件循环组.含有多个事件循环.
2. 每个事件循环,都是NioEventLoop.
3. 表示一个不断循环的,执行处理任务的线程
每个NioEventLoop都有一个Selector对象.
用于监听绑定在其上的socket网络通讯

1. BossGroup监听端口,等待连接.生成SocketChannel,封装成为NioSocketChannel 传递给(发送给)WorkerGroup.
2. WorkerGroup 接收到NioSocketChannel,注册到Selector,监听该socket发生的事件(网络请求,通讯)
3. 而无论BossGroup还是WorkerGroup本质都是NioEventLoop. 都有各自的selector. 只是他们负责的任务不一样而已.
4. NioEventLoopGroup 可以含有多个NioEventLoop,也就是该Group是多线程的.是由多个NioEventLoop组成的
5. NioEventLoopGroup 可以指定初始化多少个NioEventLoop
6. 每个BossEventLoop执行步骤:

	1. 轮训:accept:用户连接事件.处理accpet事件,与client建立连接.
	2. 生成NioSocketChannel,并将其注册到某个WokerNioEventLoop
		中的selector上
	这里就是讲BossEventLoop生成的客户端连接,
	注册到WorkerEventLoop上.发送给WorkerEventLoop.
	3. 在去处理我们任务队列的任务,即:runAllTasks

7. WorkerGroup下的NioEventLoop做的事情

循环执行的步骤:
1. 轮训 read/write 的I/O事件.
2. 处理I/O和read,write事件.在发生事件的NioSocketChannel上进行
3. runAllTasks

Pipeline

管道:如图所示,Pipeline是包含了Channel的.
那么说明,我们可以通过Pipeline获取到Channel.
而Pipeline又可以包含别的东西.
比如拦截机制,处理机制等等.

B站的尚硅谷视频的图不太清楚,这是自己的画的
8. WorkerNioEventLoop处理数据是通过Pipeline(管道)来执行的.Pipeline有很多的处理器.对我们的数据进行一系列的处理. 处理器有内置和自己开发.进行相关拦截和处理

发布了36 篇原创文章 · 获赞 1 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/DXH9701/article/details/103622664