【问题标题】:Thread pool size of ThreadPoolExecutor passed into NioEventLoopGroup in NettyNetty 中传入 NioEventLoopGroup 的 ThreadPoolExecutor 的线程池大小
【发布时间】:2018-11-27 11:51:44
【问题描述】:

我想在 Netty 中使用 NioEventLoopGroup(int nThreads, Executor executor) 构造函数为 Netty worker 创建一个 EventLoopGroup 并使用 ScheduledExecutorService 定期检查一些条件并更改 ThreadPoolExecutor 实例的线程池大小(比如 @987654325 @) 将第二个参数传递给构造函数。

当我对此进行测试时,我尝试定期增加myPool 的线程池大小,并注意到以下情况。

myPool.getPoolSize() 总是小于或等于nThread 的值。 但是myPool.getCorePoolSize()myPool.getMaximumPoolSize() 的输出表明myPool 的核心和最大池大小确实在周期性地增加,并且增加超过nThread 的值。

nThread是否限制myPool当前线程的最大数量?

【问题讨论】:

    标签: java multithreading netty


    【解决方案1】:

    nThreadNioEventLoopGroup 用于处理 IO 的线程数。所以是的,netty 永远不会使用比你在那里指定的更多的东西。

    【讨论】:

    • 谢谢@Norman。我还研究了在所有 nThreads 变为活动状态后减小 myPool 的大小,并注意到即使客户端连接关闭并且 myPool 的 maxPool 和 CorePool 大小超过 nThreads,当前线程(由 myPool.getPoolSize() 返回)也不会减少。这是因为工作线程在 EventLoopGroup 上调用 shutdownGracefully() 之前一直处于活动状态?
    • 是的...在组关闭之前,Netty 永远不会返回线程。
    猜你喜欢
    • 1970-01-01
    • 2016-04-10
    • 2014-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    相关资源
    最近更新 更多