主-从Reactor网络模型

  • Main reactor thread
    • 负责绑定监听端口
    • 绑定端口后通过单线程acceptor建立tcp连接
    • 建立tcp连接后通过epoll注策读事件
  • sub-reactor dispatch
    • 一个四核 CPU服务器,我们可以设置 sub-reactor 为 4
    • 负责监听tcp连接读写事件
    • 当acceptor建立连接后,交由sub-reactor中的一个处理
    • 收到tcp读事件后,交给工作线程处理任务
    • 与单reactor线程相比(即读写事件监听线程和acceptor线程为同一线程),单reactor 线程既分发连接建立,又分发已建立连接的 I/O,有点忙不过来,在实战中的表现可能就是客户端连接成功率偏低。
  • threadpool
    • 任务任务线程池
    • 由于处理任务比较耗时,故将任务处理线程与tcp 读事件监听线程分开,当任务耗时时,不至于影响tcp读操作

与tomcat的区别

  • Main reactor thread同tomcat中的acceptor
    等待和接收客户端连接。在接收到连接后,创建SocketChannel并将其注册到poller线程。

  • sub-reactor同tomcat中的poller
    将SocketChannel放到selector上注册读事件,轮询selector,获取就绪的SelectionKey,并将就绪的SelectionKey(或SocketChannel)委托给工作线程。tomcat中是单线程,reactor可设置多线程

  • threadpool同tomcat中的executor
    负责处理任务