gpt4 book ai didi

java - 为什么 Netty 需要线程池?

转载 作者:行者123 更新时间:2023-11-30 06:29:45 24 4
gpt4 key购买 nike

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

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

最佳答案

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

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

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

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

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

关于java - 为什么 Netty 需要线程池?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11171259/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com