簡單理解 Java I/O 模型

在理解java的I/O 模型之前先來看下基礎的I/O 模型

1.BIO 阻塞型I/O: 顧名思義在進程發出I/O請求後,進程阻塞,在操作系統I/O操作完成,即數據準備就緒後,進程恢復運行

2 NIO 非阻塞型I/O:進程進行I/O請求後 立刻返回,如果數據沒有準備好,則返回空,在使用時需要以輪詢的方式反覆進行I/O請求,確保數據到達。

3 I/O 多路複用( IO multiplexing):核心思路是以一個單獨的線程去管理進程的所有I/O 請求(同步異步不一定) ,主要有是三個模型 select ,poll,epoll 

其中 select 和poll 模型是以輪詢的方式,檢查各個線程的I/O操作有沒有完成並通知相應的線程

而epoll是通過內核通知的方式,在數據準備好以後由內核通知管理線程,再由管理線程通知I/O對應線程

4 信號驅動式IO(signal-driven IO): 再這裏首先先介紹操作系統I/O的兩個階段,第一階段,將數據由數據源(網絡,硬盤等)複製到操作系統內核緩衝區,第二階段:將數據由操作系統內核緩衝區複製到進程的內存地址空間中,信號驅動IO 是進程發出I/O請求後,不阻塞繼續運行,待I/O第一階段完成,由操作系統以信號的方式通知進程,進程進行處理,此時進行I/O 第二階段操作時進程需要阻塞

5 異步 I/O(asynchronous IO) 這個類似回調函數實現,進程發出I/O請求後,不阻塞繼續運行,當該I/O操作的第二階段完成後,操作系統通知進程 ,運行回調函數,處理數據 

 

java I/O 模型

1 BIO 阻塞型IO 對應的是java.io 包下 各種 stream 和read 的類庫

2 NIO java的NIO 是new IO 對應得模型是 I/O 多路複用

  NIO 主要由三個部分組成:channel buffer,selector 其中buffer是緩衝區的抽象,代表數據源,channel是傳輸的抽象,

selector作爲管理者 管理多個channel,整個流程就是線程通過buffer讀寫數據,數據通過channel進行傳輸,selector負責總體調度

3 AIO 異步 I/O :是在java NIO的基礎上增加特殊的channel 類來實現  並通過回調處理

 

 

 

 

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