【NIO】Buffer、Channel、Selector 關係小結

A minor發表於2020-12-24

前言:

檔案IO:

  1. BIO:讀/寫(人) --> 檔案(終點)
  2. NIO:讀/寫(人) --> Buffer(車) ==> Channel(高速路) --> 檔案(終點)

=> TPR模式:一個連線對應一個執行緒

  • –> TRP模型的根本原因是執行緒會出現阻塞
  • –> 阻塞的原因是不確定性,即該連線要佔用該執行緒多久,那麼就會傻傻等待客戶端的指令(注:實際的讀寫時間很短,可以忽略不計)

==> 那可不可以在事件確定的前提下,採用一種單執行緒的輪詢機制?

  • 什麼事件?四種事件:ACCEPT(服務端),CONNECT(客戶端),READ,WRITE
  • 事件怎麼讀取?每個Channel可以註冊一個或多個事件,為其相應端(客戶端/服務端)提供指定服務
  • 怎麼實現?由Selector提供繫結和取出功能

===> Reactor模式:IO 多路複用


網路IO(檔案是Socket):

  1. BIO-TRP模式:讀/寫 --> Socket <==> ServerSocket --> 讀/寫

  2. NIO-Reactor模式:

    讀/寫 --> Buffer --> Channel =註冊=> Selector --> Socket
    <==>
    ServerSocket --> Selector =取出=> Channel --> Buffer --> 讀/寫

【NIO】Buffer、Channel、Selector 關係小結

相關文章