gpt4 book ai didi

java - 有哪些好的资源可以解释非阻塞 IO 在幕后如何工作?

转载 作者:行者123 更新时间:2023-11-30 08:04:40 25 4
gpt4 key购买 nike

我们都从反复试验中了解到,多个阻塞线程不能很好地扩展,并且我们应该在可能的情况下改用 NIO。然而,没有那么多资源通过给出非阻塞实际工作原理的幕后示例来解释为什么非阻塞更好。

最佳答案

We all have learned from trial and error that multiple blocking threads do not scale well,

这在 10 年前是正确的,但总的来说,使用阻塞 IO 和 NIO 就足够好了。除非您有大量的连接,而服务的功能却很少,否则您可以在现代服务器上轻松支持多达 1000 个连接。不要忘记现在服务器速度更快,拥有更多核心,并且人们期望服务器能够完成更多工作。即瓶颈在于应用程序而不是 IO。

we should switch to using NIO where we see possible.

主要好处是减少了线程开销。正如我提到的,这个数字并不像十多年前 NIO 推出时那么高。

NIO 很难使用,因此我建议仅在确实需要时才使用它。

there are not as many resources explaining why non-blocking is better

解释是;您使用较少的线程,因此您的开销较低。仅当每个线程所做的工作很少时,这才有意义。

注意:通常认为 NIO 意味着非阻塞,而实际上 NIO 中所有 channel 的默认行为都是阻塞的。事实上在NIO中,只有TCP可以配置为非阻塞。这是异常(exception)而不是规则。

注2:处理少量连接的最快方法是使用阻塞NIO。

最后,使用 NIO 的另一个好处是,如果您使用“直接”或 native 缓冲区,则可以减少数据复制。但是,一旦您开始以字节为单位的方式读取/写入数据,例如,您再次需要进行批量数据传输。作为文本,这种开销淹没了您可能取得的 yield 。

by giving an under-the-hood example of how it actually works.

大多数底层差异要么没有您想象的那么多,要么完全由操作系统处理,因此对 Java 甚至 JVM 来说是模糊的。

关于java - 有哪些好的资源可以解释非阻塞 IO 在幕后如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31312151/

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