Reactor线程模型分为3种
1.单线程模型
image.png对于单线程模型,acceptor处理和handler处理都在一个线程中处理;这个的缺点显而易见,当某个handler阻塞时,会导致其他所有的client的handler都得不到执行,并且更严重的是,handler的阻塞会导致整个服务不能接收新的client请求,因为acceptor也被阻塞了。
2.多线程模型
image.pngReactor多线程模型与单线程模型的区别就是acceptor是一个处理客户端请求,并且有一组特定额NIO线程负责各个客户端连接的IO操作。
Reactor多线程模型的特点:
1.有一个专门线程,即Acceptor线程用于监听客户端的Tcp请求。
2.客户端连接的IO操作都是由一个特定的NIO线程池负责,每个客户端连接都与一个特定的NIO线程绑定,因此在这个客户端连接中所有IO操作都是在同一个线程中完成的。
3.客户端连接有很多,但是NIO线程数比较少,因此一个NIO线程可以同时绑定多个客户端连接。
3.主从多线程模型
image.png如果服务器需要同时处理大量的客户端连接请求或在进行客户单连接时,进行一些权限的检查,那么单线程的Acceptor很有可能处理不过来,造成大量的客户端不能连接到服务器。
所以在Reactor模型中,服务器端接收客户端的连接请求不在是一个线程,而是由一个独立的线程池组成的。
网友评论