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