1.相關概念
- 同步:使用同步時,Java自己處理IO讀寫。
- 異步:使用異步時,Java將IO讀寫委託給OS處理,需要將數據緩衝區地址和大小傳給OS,完成後OS通知Java處理(回調)。
- 阻塞:使用阻塞IO時,Java調用會一直阻塞到讀寫完成才返回。
- 非阻塞:使用非阻塞IO時,如果不能立馬讀寫,Java調用會馬上返回,當IO事件分發器通知可讀寫時在進行讀寫,不斷循環直到讀寫完成。
2.基本概念
- IO:阻塞IO。
- BIO:同步阻塞IO。服務器實現模式爲一個連接一個線程,即客戶端有連接請求時服務器需要啓動一個線程進行處理,如果這個鏈接不做任何事情會造成不必要的線程開銷,當然可以通過線程池機制改善。
- NIO:同步非阻塞IO。服務器實現模式爲一個請求一個線程,即客戶端發送的連接請求都會註冊到多路複用器上,多路複用器輪詢到連接有IO請求時才啓動一個線程進行處理。用戶進程也需要時不時的詢問IO操作是否就緒,這需要用戶進行不停的去詢問。NIO的包括三個核心概念:緩衝區(Buffer)、通道(Channel)、選擇器(Selector)。
- AIO:異步非阻塞IO。最大的特性時具有異步能力,這種能力對socket與文件I/O都起作用。AIO其實是一種在讀寫操作結束之前允許進行其他操作的I/O處理。
3.應用場景
- 併發連接數不多時採用BIO,因爲它編程和調試都非常簡單,
- 如果涉及到高併發的情況,應選擇NIO或AIO。
參考:https://blog.csdn.net/qq_28323595/article/details/88909278