我们都从反复试验中了解到,多个阻塞线程无法很好地扩展,我们应该切换到使用NIO,我们认为可能。然而,没有那么多资源解释为什么非阻塞更好,通过给出一个关于它如何实际工作的引擎盖示例。
答案 0 :(得分:1)
我们都从反复试验中了解到多个阻塞线程无法很好地扩展,
10年前这是真的,但总的来说,使用阻塞IO和NIO的效果非常好。除非您拥有非常多的连接和服务很少,否则您可以在现代服务器上轻松支持多达1000个连接。不要忘记服务器现在更快,拥有更多内核,人们希望服务器能够完成更多工作。即瓶颈在应用程序中而不是IO。
我们应该切换到我们认为可能的NIO。
主要好处是减少线头。正如我所提到的,这并不像十年前推出NIO时那么高。
NIO更难以使用,所以我建议只在你需要的时候使用它。
没有那么多资源解释为什么非阻塞更好
解释是;您使用较少的线程,因此您的开销较低。这只有在每个线程所做的工作很少的情况下才有意义。
注意:通常假设NIO意味着非阻塞,而实际上 all NIO中的Channels的默认行为是阻塞的。实际上在NIO中,只能将TCP配置为非阻塞。这是例外,而不是规则。
注意2:处理少量连接的最快方法是使用阻塞NIO。
最后,如果您使用"直接"或原生缓冲区。但是,只要您以字节方式开始读/写数据,就需要再次进行数据的批量传输,例如:作为文本,这个开销淹没了你可能获得的收益。
给出一个关于它如何实际运作的引擎盖示例。
大多数引擎盖下的差异要么是,不是你想象的那么多,要么完全由操作系统处理,因此从Java甚至JVM中隐藏起来。