【问题标题】:Netty - relationship between NioWorker pool and worker thread poolNetty - NioWorker 池和工作线程池的关系
【发布时间】:2012-09-29 14:11:11
【问题描述】:

上下文是 Netty 3.5.x.

NioServerSocketChannelFactoryNioClientSocketChannelFactory创建时,NioWorkers的个数与工作线程池中的线程个数有什么关系? Netty 的设计是否规定线程池中可用的线程数至少应与NioWorkers 的数量一样多?如果线程池中的线程数少于NioWorkers 的数量会怎样?

【问题讨论】:

    标签: java multithreading netty


    【解决方案1】:

    是的,关系是 1:1。因此,您至少需要拥有与 NioWorkers 一样多的线程。如果你有更少,它会在创建 *SocketChannelFactory 时抛出一个“挂起”的异常,具体取决于 Executor 实现。

    【讨论】:

    • 感谢您的回答。以我的经验,如果你线程池中的线程数少于NioWorkers的数量,客户端或服务器有时会长时间无法完成连接请求(内部,一个boss线程提交的注册任务似乎永远被接走)。我想知道 Netty 不允许创建线程池中的最大线程数小于 NioWorkers 的 ChannelFactory 对象是否有意义。
    • 目前,如果你使用只接受 2 个执行器的构造函数,很容易犯这个错误(例如NioClientSocketChannelFactory(Executor, Executor)——默认情况下,Netty 将创建两倍数量的NioWorkers 作为处理器数量,并且如果工作执行程序无法提供至少那么多线程,则会出现间歇性连接失败。此外,如果关联真的是 1:1,那么这可能值得在 JavaDoc 中明确说明。
    猜你喜欢
    • 2018-01-20
    • 2011-07-25
    • 1970-01-01
    • 2016-08-10
    • 1970-01-01
    • 1970-01-01
    • 2018-05-16
    • 1970-01-01
    • 2013-08-09
    相关资源
    最近更新 更多