- 抽象出两个线程池:BossGroup和WorkerGroup,线程池类型是NioEventLoopGroup,其中子线程的类型是NioEventLoop
a. BoosGroup:只负责客户端连接
b. WorkerGroup:只负责网络读写 - NioEventLoopGroup相当于一个事件循环组,其中含有多个事件循环(这个子线程的数量可以指定),每个循环是NioEventLoop,而NioEventLoo代表一个不断循环执行处理任务的线程。
a. NioEventLoop里面都有一个selector,用于监听绑定在它上面的socket的网络通讯,即监所绑定的channel的连接事件 - 其中BoosGroup中的NioEventLoop中循环执行的任务分为三步
a. 轮询accept事件
b. 处理accept事件,并建立连接,生成一个NioSocketChannel,再将其绑定到WorkerGroup中的某个子线程NioEventLoop中的selector上
c. 再处理任务队列的任务,runAllTask - 其中WorkerGroup中NioEventLoop中循环执行的任务分为三步
a. 轮询read、write事件
b. 处理io事件,处理read或者write事件,在对应的NioSocketChannel读写(之前Boss中注册过来的)
c. 再处理任务队列的任务,runAllTask - 其中WorkerGroup中NioEventLoop中,处理业务逻辑时会使用pipeline(管道),管道包含了channel,即可以通过pipeline可以获取到所对应的channel,pipeline包含多个处理器,有内置也可以自己开发的处理器,可以对数据进行拦截或过滤
Netty工作原理
于 2023-09-25 13:54:04 首次发布