對我來說,下面是異步非阻塞I/O最有可能的定義:java的選擇是異步或無阻塞架構
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層進行模擬還是使用底層OS來實現?假定下層OS具備對這些功能的所有支持。
請參考答案。