(0) 先了解基本的线程知识
(1) 首先了解基本channel原理 ,这里将在selector处理各个channel的数据。
(2) 上述中的thread描述的很好。 所以在netty中用nioEventloopGroup来处理线程。
(3) 在NioEventLoopGroup的整个体系中,实际上就是个生产者与消费者的组合。 在loop里,包含了一个队列 ,用来存储 task,而它同时管理着来消费这些task的 消费者Executor.
通过源码可以跟踪到,loop里开始启动后,有自己总的Executor,负责把selector里的数据做成task往队列里塞,同时要负责其消费者Executor的管理,包含它们的生成与启动。而消费都的Executor就只负责进行task的消费即可。
在每一个消费都的task的消费中,都会将pipline里的各个handler走一遍。 in 是从pipline里的头走到尾,而out 则是由尾走到头。而每个hander之间可以没有互相加工的关系 ,比如每个handler都处理原始数据,也可以类似code,后,将加工好的数据传给下一个handler. 其中还可以加日志等已经做好的handler .
相关的代码参考:
http://10.30.40.10/blocks/taosdb.git 里面的netty包章节,其中包含了tcp ,udp的demo.
这
参考文章:
channel:
https://blog.csdn.net/weixin_34237596/article/details/92738331
eventloop线程的分配 :
https://blog.csdn.net/thinking_fioa/article/details/81952066
原码解读