Netty 线程模型在多个客户端连接的情况下如何工作?
我打算在即将到来的项目中使用Netty。此项目将同时充当客户端和服务器。特别是它将建立和维护与各种服务器的许多连接,同时为自己的客户端提供服务。
现在,NioServerSocketChannelFactory的文档相当好地指定了服务器端的线程模型 - 每个绑定的侦听端口在整个过程中都需要一个专用的老板线程,而连接的客户端将在工作线程上以非阻塞方式处理。具体而言,一个工作线程将能够处理多个连接的客户端。
但是,NioClientSocketChannelFactory的文档不太具体。这似乎也同时利用了老板和工人线程。但是,文档指出:
一个NioClientSocketChannelFactory有一个老板线程。它会根据请求尝试连接。连接尝试成功后,boss 线程会将连接的通道传递给 NioClientSocketChannelFactory 管理的工作线程之一。
工作线程的工作方式似乎也与服务器情况相同。
我的问题是,这是否意味着从我的程序到外部服务器的每个连接都会有一个专用的老板线程?如果我建立数百或数千个这样的连接,这种规模将如何扩大?
作为旁注。将单个执行器(缓存线程池)重新用作 ChannelFactory 的 bossExecutor 和 workerExecutor 是否有任何不良副作用?在不同的客户端和/或服务器 ChannelFactory 实例之间重用又如何呢?这里对此进行了一些讨论,但我不认为这些答案足够具体。谁能详细说说这个?