一、IO模型分類
1. 阻塞IO模型:
a. 讀寫程序會出現阻塞現象
b. 資料沒有就緒,用戶執行緒會一直處于阻塞狀態,一直讀不到資料,造成執行緒浪費
2. 非阻塞IO模型
a. While 去read()資料,立即回傳結果,資料沒有準備好就報錯,繼續回圈read,直到資料準備好,會一直占有cpu去read
3. 多路復用IO模型(使用比較多)
a. 有一個執行緒不斷去輪詢多個socket狀態,當socket有讀寫事件,才呼叫IO讀寫操作
b. 通過一個執行緒管理多個socket,當socket有讀寫事件發生才會占用資源進行實際讀寫操作,并且對達到事件逐一回應
c. 適合連接數多的情況
d. 輪詢通過內核進行,效率要比用戶執行緒輪詢高得多
e. 事件回應體很大,會導致后續事件處理慢和新增時間輪詢
4. 信號驅動IO模型
a. IO請求--》注冊信號函式---》內核資料就緒,發送信號給用戶執行緒--》收到信號,進行實際IO操作
5. 異步IO模型(最理想的IO模型)
a. 內核等待資料準備完成,然后將資料copy到執行緒上,發送信號告知執行緒,資料可以直接使用了,
b. 與信號驅動IO操作不同的是,發送的信號是告知資料已經可以直接使用,信號驅動時告知執行緒開始進行IO操作,
c. 注意:需要作業系統底層支持

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/134840.html
標籤:Java
