主-从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
负责处理任务