我来自node.js背景,我很困惑它在Netty中不像在node.js中那样是单线程的。( NioServerSocketChannelFactory文档说明有boss线程和worker线程)
也许这是因为与node.js不同,许多现有的Java库都不是异步的。但即使是这样,为什么不让用户在必要时创建线程呢?它是不是更自然,在概念上与异步事件驱动架构保持一致?
发布于 2012-06-25 08:06:48
我对node.js和javascript的了解相对有限,但node.js不是因为javascript不支持多线程而受到限制吗?
在Netty中使用boss和worker线程是为了能够利用多个处理器核心,而不需要运行多个进程。JVM相当繁重,因此限制所需实例的数量是有意义的。另外,我怀疑操作系统在线程之间切换的速度要比整个进程快得多。
Boss线程用于接受传入的连接,但连接的处理将移交给工作线程。我手头没有参考资料,但我模糊地记得Grizzly项目发布了一些性能结果,表明这比尝试在同一线程中接受传入连接并处理这些连接更有性能。
接受的连接以循环方式在工作线程上进行负载平衡。工作线程不会彼此交互,除非您显式编写代码来执行此操作。因此,工作线程模型与我对node.js的理解基本相同。
Netty通过提供允许应用程序通过线程池定义线程模型的机制来处理非异步库,线程池独立于boss和worker线程。为了帮助这一点,Netty还提供了一些自定义线程池,它们知道给定连接正在使用的内存资源,并且还可以保证连接生成的事件的顺序。但是,没有必要使用这些机制。应用程序可以自由地使用最适合的线程模型。
https://stackoverflow.com/questions/11171259
复制相似问题