BIO&NIO&AIO模型快速實戰
阿新 • • 發佈:2022-04-07
BIO 同步阻塞IO
大白話介紹
- 一次只能處理一個連線,BIO它的連線和讀資料都是阻塞的。
理論介紹
- 同步阻塞,伺服器實現模式一個連線一個執行緒,即客戶端有連線請求時伺服器端就需要啟動一個執行緒進行處理,如果這個連線不做任何事情會造成不必要的執行緒開銷。
弊端:
- 阻塞 (最大問題,如果處理500個請求,但是有499個沒有給我返回資料,那麼我就一直在這阻塞住了)
- 併發效率低(一次只能處理一個請求)
NIO 非阻塞IO
大白話介紹
- 設定configureBlocking()方法未非阻塞狀態
- 就算到時候接受不到發來的資料,那麼NIO也不會阻塞
理論介紹
- NIO 同步非阻塞,伺服器實現模式為一個請求一個執行緒,即客戶端傳送的連線請求都會註冊到 多路複用器上,多路複用器輪詢到連線有I/O請求時才啟動一個執行緒進行處理。使用者程序也 需要時不時的詢問IO操作是否就緒,這就要求使用者程序不停的去詢問
AIO
理論介紹
- AIO 非同步非阻塞,在此種模式下,使用者程序只需要發起一個IO操作然後立即返回,等IO 操作真正的完成以後,應用程式會得到IO操作完成的通知,此時使用者程序只需要對 資料進行處理就好了,不需要進行實際的IO讀寫操作,因為真正的IO讀取或者寫入 操作已經由核心完成了
BIO、 NIO、AIO適用場景分析
- BIO方式適用於連線數目比較小且固定的架構,這種方式對伺服器資源要求比較高, 併發侷限於應 用中,JDK 1.4以前的唯一選擇,但程式直觀簡單易理解。
- NIO方式適用於連線數目多且連線比較短(輕操作)的架構,比如聊天伺服器,併發侷限於應用中,程式設計比較複雜,JDK 1.4開始支援。
- AlO方式使用於連線數目多且連線比較長(重操作) 的架構,比如相簿伺服器,充分呼叫OS參與並 發操作,程式設計比較複雜,JDK 7開始支援。