2

来自 node.js 背景,我很困惑 Netty 不像 node.js 那样是单线程的。(NioServerSocketChannelFactory文档中说有boss线程和worker线程)

也许是因为与 node.js 不同,许多现有的 Java 库不是异步的。但即使是这样,为什么不让用户根据需要创建线程呢?它不是更自然,在概念上与异步事件驱动架构保持一致吗?

4

1 回答 1

5

我对node.js和javascript的了解比较有限,但是node.js不是受限于javascript不支持多线程吗?

在 Netty 中使用 boss 和 worker 线程是为了能够利用多个处理器内核而无需运行多个进程。JVM 非常重,因此限制所需实例的数量是有意义的。此外,我怀疑操作系统在线程之间切换比完整进程要快得多。

Boss 线程用于接受传入的连接,但连接的处理被移交给工作线程。我没有提到手,但我依稀记得 Grizzly 项目发布了一些性能结果,表明这比尝试接受传入连接并在同一个线程中处理这些连接更高效。

接受的连接以循环方式在工作线程上进行负载平衡。除非您明确地编写代码,否则工作线程不会相互交互。因此,工作线程模型与我对 node.js 的理解几乎相同。

Netty 通过提供允许应用程序通过独立于老板和工作线程的线程池定义线程模型的机制来处理非异步库。为了帮助解决这个问题,Netty 还提供了一些自定义线程池,它们知道给定连接正在使用的内存资源,并且还可以保证连接生成的事件的顺序。但是,没有必要使用这些机制。应用程序可以自由使用最适合的任何线程模型。

于 2012-06-25T08:06:48.173 回答