Netty - 指定创建的线程数

4

让我就Netty中的线程提出几个问题。

Q1. 哪个线程被创建了? 根据文档,以下构造函数会创建多个线程(2 * 可用处理器数量)。这意味着它创建了多个 boss 线程或 worker 线程?我的假设是一个 boss 线程和多个 worker 线程。我正确吗?

public NioServerSocketChannelFactory(Executor bossExecutor, Executor workerExecutor) 创建一个新实例。调用此构造函数相当于在机器上可用处理器数量的 2 倍上调用 NioServerSocketChannelFactory(Executor, Executor, int)。

Q2. 根据文档,我似乎可以使用以下构造函数指定最大工作线程数。我是否可以隐式指定要创建的确切工作线程数 - 比如说16个?

public NioServerSocketChannelFactory(Executor bossExecutor, Executor workerExecutor, int workerCount) 创建一个新实例。 参数: bossExecutor - 将执行 boss 线程的 Executor workerExecutor - 将执行 I/O worker 线程的 Executor workerCount - I/O worker 线程的最大数量

Q3. 是否有任何方法可以知道当前运行的 boss 和 worker 线程数量?

非常感谢您的帮助!

1个回答

3

问题1:创建了哪些线程?根据文档,使用以下构造函数可以创建多个线程(2 * 可用处理器数量)。这意味着它会创建多个主线程还是工作线程?我想应该是一个主线程和多个工作线程。我的想法正确吗?

是的。

问题2:根据文档,似乎我可以使用以下构造函数指定最大的工作线程数。我是否可以隐式地指定要创建的工作线程的确切数量 - 比如说16?

只需指定 Executors.newCachedThreadPool() 并将要使用的最大线程数作为构造函数参数即可。

问题3:有没有办法知道当前运行的主线程和工作线程的数量?

您可以通过 ThreadPoolExecutor.getActiveCount() 获取它,假设您传递了 Executors.newCachedThreadPool()。它返回 ThreadPoolExecutor,因此您可以将其保存在某个地方,然后查询它以查看实际活动线程的数量。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接