Netty
2024-11-18 17:08:56 0 举报
NettyReactor模型
作者其他创作
大纲/内容
Selector
NIioEventGroup
Step 2: processSelectedKeys
Array
Client
Worker (NioEventLoopGroup)
Header -> AbstractChannelHandlerContext
绑定一个任务队列
Step 3: runAllTasks
Boss (NioEventLoopGroup)
FastThreadLocalThread
TaskQueue
Boss的Loop绑定Selector仅注册Accept事件
Pipeline保存着绑定的Channel
Worker的Loop绑定Selector注册Read、Write等
......
Tail -> AbstractChannelHandlerContext
NioEventLoop
每个Loop绑定一个线程第一次添加任务启动线程
Pipeline
AbstractChannelHandlerContext head
每个Channel 有自己的Pipleline
AbstractChannelHandlerContext中保存着Pipeline,也就是关联着Channel也就是有EventLoop
Worker
注册
NioEventLoopGroup
Step 1: select()
AbstractChannelHandlerContext Tail
注册NioSocketChannel到Loop的Selector上
注意:即使 Boss Group 的 Thread 数设置多个,最终Netty启动后,也仅仅是启动一个线程,一个Server 端口只对应一个FastThreadLocalThread 线程,因此,Boss Group的线程数设置不设置都没有关系
TaskQueue任务队列
绑定一个Selector
一个客户端,也就是一个SocketChannel最终连接服务端成功后,channel会被绑定到固定的一个NioEventLoop上,最终该channel的所有read与write操作全部由该Loop(也就是固定的线程)来执行,这就是netty的无锁化实现,从而避免高并发下锁的性能问题。
Netty经典Reactor模型
NioSocketChannel持有关联的EventLoop,在register时绑定Channel创建自身的Pipeline
Thread
ChannelHandler
Pipleline中维维护ctx的列表
Boss
0 条评论
下一页