对我来说,下面是异步和非阻塞 I/O 最可能的定义:
Asynchronous I/O:
在异步 I/O 应用程序中,应用程序立即返回,操作系统将在字节可用于处理时通知它们。
NON-blocking I/O:
在这里,应用程序立即返回可用的数据,并且应用程序应该有轮询机制来找出更多数据何时准备好。
知道了这些定义之后,如果我们分析一下java通道ie ,SocketChannel
那么我们可以通过方法发现这些通道可以作为阻塞或非阻塞模式使用。并假设我们将它们用作非阻塞模式。那么问题来了:ServerSocketChannel
DatagramSocketChannel
configureBlocking(boolean block)
如果我将使用Selector
ie 将通道注册到selector
异步 I/O还是非阻塞 I/O?
我觉得这是 java 中的异步 I/O,当且仅当底层操作系统通知 java 应用程序有关通道的就绪选择时。否则,它是非阻塞 I/O,selector
只是一种机制,可以帮助我们轮询上述通道,正如我在定义中提到的那样。哪个是对的?提前致谢。
编辑:
我已经回答了问题的一部分,即 I/O 的类型以及 java 如何促进这些功能。
但是仍然存在一个问题,所有这些功能是由 java 提供的,是在 java 层模拟还是使用底层 OS 来促进?假设底层操作系统具有对这些功能的所有支持。
请参考答案。