Java中IO、BIO、NIO和AIO的理解

1.相關概念

  1.  同步:使用同步時,Java自己處理IO讀寫
  2. 異步:使用異步時,Java將IO讀寫委託給OS處理,需要將數據緩衝區地址和大小傳給OS,完成後OS通知Java處理(回調)。
  3. 阻塞:使用阻塞IO時,Java調用會一直阻塞到讀寫完成才返回。
  4. 非阻塞:使用非阻塞IO時,如果不能立馬讀寫,Java調用會馬上返回,當IO事件分發器通知可讀寫時在進行讀寫,不斷循環直到讀寫完成。

2.基本概念

  1. IO:阻塞IO。
  2. BIO:同步阻塞IO。服務器實現模式爲一個連接一個線程,即客戶端有連接請求時服務器需要啓動一個線程進行處理,如果這個鏈接不做任何事情會造成不必要的線程開銷,當然可以通過線程池機制改善。
  3. NIO:同步非阻塞IO。服務器實現模式爲一個請求一個線程,即客戶端發送的連接請求都會註冊到多路複用器上,多路複用器輪詢到連接有IO請求時才啓動一個線程進行處理。用戶進程也需要時不時的詢問IO操作是否就緒,這需要用戶進行不停的去詢問。NIO的包括三個核心概念:緩衝區(Buffer)、通道(Channel)、選擇器(Selector)。
  4. AIO:異步非阻塞IO。最大的特性時具有異步能力,這種能力對socket與文件I/O都起作用。AIO其實是一種在讀寫操作結束之前允許進行其他操作的I/O處理。

3.應用場景

  • 併發連接數不多時採用BIO,因爲它編程和調試都非常簡單,
  • 如果涉及到高併發的情況,應選擇NIO或AIO。

參考:https://blog.csdn.net/qq_28323595/article/details/88909278

          https://blog.csdn.net/m0_38109046/article/details/89449305?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase

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