原始 Java IO API 是同步的。从 1.4 开始,Java 有了 NIO API,它是异步的。本来设计用于高负载系统的系统怎么会不关心性能和资源使用效率呢?
从技术上讲,这意味着阻塞的线程会消耗内存(~1-2Mb)并且不会执行任何有用的操作。我也确实理解为什么它被认为是无效的:只是因为工作实际上不是由 CPU 完成的,而是由网卡或磁盘完成的,而且它们没有线程。所以理论上实际上没有理由阻塞线程。然而,大多数 Java 套接字读取示例都使用阻塞的读取线程并等待传入的字符。
所以我想要技术解释为什么这在早期的 Java 中不是一个问题。
PS。对我来说,实际的问题是“使用什么网络和磁盘 API:同步还是异步?”。作为 Java 开发人员,我不太关心它,但现在我们团队中有 C++ 开发人员,他们认为同步 Java IO 是“严重的 Java 问题”。PPS。我真的很喜欢 Kotlin 协程概念作为这个问题的解决方案。
最佳答案
JVM 对非阻塞 IO 的实现在很大程度上取决于操作系统对其的支持,而在 Java 的早期,操作系统的支持是参差不齐且不统一的。这从来都不是“不是问题”。
关于java - 为什么阻塞 IO API 在早期的 Java 中不是问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56925076/