我正在研究Netty 4.0.0.Alpha5代码,以了解如何处理线程。我还在http://netty.io/wiki/new-and-noteworthy-in-4.0.html#wiki-h2-34阅读了Netty 4新线程模型的介绍。
据我了解,目标是:
所以,我想知道我的解释是否正确。如果我是对的,那么出现以下问题:
我只是想了解为什么事情就是这样,并获得有关Netty 4设计意图的一些信息。
答案 0 :(得分:8)
对这两个问题都是正确的。通过将处理程序分配给非I / O事件组,可以防止I / O线程被长时间运行的操作(如数据库访问)阻止。您可以指定大型EventExecutorGroup
,具体取决于处理程序的功能。它与通常的线程池没有什么不同。如果线程池忙,则任何执行长时间运行任务的尝试都将排队。
答案 1 :(得分:2)
对于Netty 3,你的两点也是如此。
Netty 3有老板和工人线程的概念。 boss线程负责接受新连接,然后将其卸载到工作线程。
创建NioServerSocketChannelFactory
时可以配置工作线程的数量。
现在,Netty 4已经分别通过父事件循环和子事件循环替换了这些boss和worker线程。
但核心思想保持不变:为了摆脱每个连接的线程模型,你必须为一个线程分配多个连接。
因此,当您创建服务器时,将有一个固定的N个线程池,专用于处理连接。如果连接数低于N,则每个线程的连接数不会超过一个。另一方面,如果您有多于N个连接,则某些线程将管理多个连接。这是以循环方式完成的,请查看MultithreadEventExecutorGroup.next()