本期java培訓教程基礎篇-Java開發中的I/O模型原理解析,I/O是 input/output的縮寫即輸入輸出端口。每個設備都會有一個專用的I/O地址用來處理自己的輸入輸出信息。常見的五種IO模型分別是:阻塞IO、非阻塞IO、多路復用IO、信號驅動IO以及異步IO。
接下來我們具體了解Java 開發中的I/O模型:
1、BIO(Blocking IO)
BIO是同步阻塞模型一個客戶端連接對應一個處理線程。在BIO中accept和read方法都是阻塞操作,如果沒有連接請求accept方法阻塞;如果無數據可讀取read方法阻塞。
2、NIO(Non Blocking IO)
NIO是同步非阻塞模型服務端的一個線程可以處理多個請求,客戶端發送的連接請求注冊在多路復用器Selector上服務端線程通過輪詢多路復用器查看是否有IO請求有則進行處理。
NIO的三大核心組件:
(1)Buffer:用于存儲數據底層基于數組實現,針對8種基本類型提供了對應的緩沖區類。
(2)Channel:用于進行數據傳輸面向緩沖區進行操作支持雙向傳輸,數據可以從Channel讀取到Buffer中也可以從Buffer寫到Channel中。
(3)Selector:選擇器當向一個Selector中注冊Channel后,Selector 內部的機制就可以自動不斷地查詢(Select)這些注冊的Channel是否有已就緒的 I/O 事件(例如可讀,可寫,網絡連接完成等),這樣程序就可以很簡單地使用一個線程高效地管理多個Channel也可以說管理多個網絡連接,因此Selector也被稱為多路復用器。
當某個Channel上面發生了讀或者寫事件,這個Channel就處于就緒狀態,會被Selector監聽到,然后通過SelectionKeys可以獲取就緒Channel的集合進行后續的I/O操作。
Epoll是Linux下多路復用IO接口select/poll的增強版本,它能顯著提高程序在大量并發連接中只有少量活躍的情況下的系統CPU利用率,獲取事件的時候它無須遍歷整個被偵聽的描述符集,只要遍歷那些被內核IO事件異步喚醒而加入Ready隊列的描述符集合就行了。
3、AIO(NIO 2.0)
AIO是異步非阻塞模型一般用于連接數較多且連接時間較長的應用,在讀寫事件完成后由回調服務去通知程序啟動線程進行處理。與NIO不同,當進行讀寫操作時只需直接調用read或write方法即可。這兩種方法均為異步的對于讀操作而言,當有流可讀取時操作系統會將可讀的流傳入read方法的緩沖區并通知應用程序;對于寫操作而言當操作系統將write方法傳遞的流寫入完畢時操作系統主動通知應用程序。可以理解為read/write方法都是異步的完成后會主動調用回調函數。
以上就是本期詳細的java培訓教程內容介紹了,如果您對java技術非常感興趣,可以來了解一下千鋒教育提供的java培訓課程,千鋒教育在全國20多所城市均設有教學基地,歡迎同學們前來咨詢了解。