NIO、BIO、AIO介紹

目前有三種IO共存。分別是BIO、NIO和AIO。

BIO 全稱Block-IO 是一種同步且阻塞的通信模式。是一個比較傳統的通信方式,模式簡單,使用方便。但併發處理能力低,通信耗時,依賴網速。(線程發起io請求後,一直阻塞(阻塞io),直到數據就緒後,用戶線程將數據寫入socket空間,或從socket空間讀取數據)

 

NIO,全程 Non-Block IO ,一種非阻塞同步的通信模式。

(線程發起io請求後,立即返回(非阻塞io)。用戶線程不阻塞等待,但是,用戶線程要定時輪詢檢查數據是否就緒,當數據就緒後,用戶線程將數據從用戶空間寫入socket空間,或從socket空間讀取數據到用戶空間(同步))

(IO多路複用(NIO):上述NIO實現中,需要用戶線程定時輪訓,去檢查IO數據是否就緒,佔用應用程序線程資源。IO多路複用模型中,將檢查IO數據是否就緒的任務,交給系統級別的select或poll模型,由系統進行監控,減輕用戶線程負擔。)

原來的 I/O 以流的方式處理數據,而 NIO 以塊的方式處理數據。

 

AIO,全程 Asynchronous IO,是異步非阻塞的IO。是一種非阻塞異步的通信模式。

(線程發起io請求後,立即返回(非阻塞io),當數據讀寫完成後,OS通知用戶線程(異步)。這裏數據寫入socket空間,或從socket空間讀取數據到用戶空間由OS完成,用戶線程無需介入,所以也就不會阻塞用戶線程,即異步。)

在NIO的基礎上引入了新的異步通道的概念,並提供了異步文件通道和異步套接字通道的實現。

AIO基於時間驅動思想,採用proactor模式。數據完成後,由os主動通知應用程序,通過epoll實現,節省了NIO中selector循環遍歷檢測數據就緒的資源開銷

 

三種IO的區別

BIO (Blocking I/O):同步阻塞I/O模式。

NIO (New I/O):同步非阻塞模式。

AIO (Asynchronous I/O):異步非阻塞I/O模型。

那麼,同步阻塞、同步非阻塞、異步非阻塞都是怎麼回事呢?下面我們用一篇燒開水的例子給大家稍作解釋。

同步阻塞模式:開始燒水,並坐在水壺面前一直等着水燒開。

同步非阻塞模式:開始燒水,但是不一直坐在水壺前面等,而是幹別的事情,然後每隔幾分鐘看一下水有沒有燒開。

異步非阻塞I/O模型:開始燒水,我們不坐在水壺前面等,也不隔幾分鐘去看一下,而是等水燒開之後聲響通知我。

阻塞VS非阻塞:人是否坐在水壺前面一直等。(是否一直等待任務結束)

同步VS異步:是不是水燒開之後主動通知人(是不是會回調通知)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章