开局之前

这玩意我用过
但是reactor 劳资不会。。。

如何实现一个线程处理多个连接—reactor模型?

核心类就是reactor
netty中的EventLoop就是reactor
网络连接和reactor是多对一的关系,reactor只能对应到一个Java线程,所以一个网络连接对应一个Java线程

netty中有多少个EventLoop

  1. 如果 NettybossGroup 只监听一个端口,那 bossGroup 只需要 1 个 EventLoop 就可以了,多了纯属浪费。
  2. 默认情况下,Netty 会创建“2*CPU 核数”个 EventLoop,由于网络连接与 EventLoop 有稳定的关系,所以事件处理器在处理网络事件的时候是不能有阻塞操作的,否则很容易导致请求大面积超时。如果实在无法避免使用阻塞操作,那可以通过线程池来异步处理。

    为何需要bossgroup和workergroup

    处理 TCP 连接请求和读写请求是通过两个不同的 socket 完成的
    bossGroup 处理完连接请求后,会将这个连接提交给 workerGroup 来处理, workerGroup 里面有多个 EventLoop,使用轮询来决定使用哪个EventLoop?

image.png

reactor资料

http://gee.cs.oswego.edu/dl/cpjslides/nio.pdf