考虑一下 Netty 教程中的这个例子(尽管它不是我见过的唯一例子):
Executor bossPool = Executors.newCachedThreadPool();
Executor workerPool = Executors.newCachedThreadPool();
ChannelFactory channelFactory = new NioClientSocketChannelFactory(bossPool, workerPool);
这里创建了两个单独的缓存线程池。但为什么?如果多个线程池的大小是固定的,我可以理解它们的用途,但缓存的线程池不是。那么,如果您可以拥有一个不断扩展的缓存线程池,为什么还要拥有多个缓存线程池呢?事实上,只有一个不是更好吗?因为如果你有两个不同的线程提交任务,那么这意味着空闲的工作线程更有可能被利用。
我想知道这一点,因为我正在为服务器编写网络,并且我正在分别处理 UDP 和 TCP 连接。我想将处理任务分派到线程池,我正在考虑为此使用缓存线程池。但是,我不知道我应该使用一个还是两个。
谢谢。