java nio簡介
1:基本概念
io是主存與外部設備拷貝數據的過程。io是操作系統底層功能實現 底層通過IO指令進行數據操作 所有語言運行時系統都會提供較高的工具類
2 java標準IO回顧;
java中提供有基本的io操作 基於本地方法的實現 我們則無需關注底層操作 inputstream跟outputstream(字節流) read、write字符流等等。
3NIO簡介
其實就是 java new io的縮寫,主要功能如下:
-爲所有的原始類型提供buffer緩存支持。
-字符集編碼解碼方案
-channel一個新的IO抽象
-支持鎖和內存映射文件的文件訪問接口。
–提供多路 (non-bloking) 非阻塞式的高伸縮性網絡 I/O 。
4. Buffer&Chanel
channel跟buffer是NIO中2個經常用到的數據抽象 基本的數據抽象。
buffer是一塊連續的內存,是nio數據讀跟寫的中轉地
channel數據的源頭或者目的地 用於向buffer提供數據 或者buffer讀取數據的唯一接口
異步IO支持
一個buffer主要有這3個組成 位置position 最大容量limit capacity容量
5 非阻塞 IO
關於非阻塞 IO 將從何爲阻塞、何爲非阻塞、非阻塞原理和異步核心 API 幾個方面來理解。
何爲非阻塞?
下面有個隱喻:
一輛從 A 開往 B 的公共汽車上,路上有很多點可能會有人下車。司機不知道哪些點會有哪些人會下車,對於需要下車的人,如何處理更好?
1. 司機過程中定時詢問每個乘客是否到達目的地,若有人說到了,那麼司機停車,乘客下車。 ( 類似阻塞式 )
2. 每個人告訴售票員自己的目的地,然後睡覺,司機只和售票員交互,到了某個點由售票員通知乘客下車。 ( 類似非阻塞 )
很顯然,每個人要到達某個目的地可以認爲是一個線程,司機可以認爲是 CPU 。在阻塞式裏面,每個線程需要不斷的輪詢,上下文切換,以達到找到目的地的結果。而在非阻塞方式裏,每個乘客 ( 線程 ) 都在睡覺 ( 休眠 ) ,只在真正外部環境準備好了才喚醒,這樣的喚醒肯定不會阻塞。
非阻塞的原理
把整個過程切換成小的任務,通過任務間協作完成。
由一個專門的線程來處理所有的 IO 事件,並負責分發。
事件驅動機制:事件到的時候觸發,而不是同步的去監視事件。
線程通訊:線程之間通過 wait,notify 等方式通訊。保證每次上下文切換都是有意義的。減少無謂的進程切換。
以下是異步 IO 的結構:
io是主存與外部設備拷貝數據的過程。io是操作系統底層功能實現 底層通過IO指令進行數據操作 所有語言運行時系統都會提供較高的工具類
2 java標準IO回顧;
java中提供有基本的io操作 基於本地方法的實現 我們則無需關注底層操作 inputstream跟outputstream(字節流) read、write字符流等等。
3NIO簡介
其實就是 java new io的縮寫,主要功能如下:
-爲所有的原始類型提供buffer緩存支持。
-字符集編碼解碼方案
-channel一個新的IO抽象
-支持鎖和內存映射文件的文件訪問接口。
–提供多路 (non-bloking) 非阻塞式的高伸縮性網絡 I/O 。
4. Buffer&Chanel
channel跟buffer是NIO中2個經常用到的數據抽象 基本的數據抽象。
buffer是一塊連續的內存,是nio數據讀跟寫的中轉地
channel數據的源頭或者目的地 用於向buffer提供數據 或者buffer讀取數據的唯一接口
異步IO支持
一個buffer主要有這3個組成 位置position 最大容量limit capacity容量
5 非阻塞 IO
關於非阻塞 IO 將從何爲阻塞、何爲非阻塞、非阻塞原理和異步核心 API 幾個方面來理解。
何爲非阻塞?
下面有個隱喻:
一輛從 A 開往 B 的公共汽車上,路上有很多點可能會有人下車。司機不知道哪些點會有哪些人會下車,對於需要下車的人,如何處理更好?
1. 司機過程中定時詢問每個乘客是否到達目的地,若有人說到了,那麼司機停車,乘客下車。 ( 類似阻塞式 )
2. 每個人告訴售票員自己的目的地,然後睡覺,司機只和售票員交互,到了某個點由售票員通知乘客下車。 ( 類似非阻塞 )
很顯然,每個人要到達某個目的地可以認爲是一個線程,司機可以認爲是 CPU 。在阻塞式裏面,每個線程需要不斷的輪詢,上下文切換,以達到找到目的地的結果。而在非阻塞方式裏,每個乘客 ( 線程 ) 都在睡覺 ( 休眠 ) ,只在真正外部環境準備好了才喚醒,這樣的喚醒肯定不會阻塞。
非阻塞的原理
把整個過程切換成小的任務,通過任務間協作完成。
由一個專門的線程來處理所有的 IO 事件,並負責分發。
事件驅動機制:事件到的時候觸發,而不是同步的去監視事件。
線程通訊:線程之間通過 wait,notify 等方式通訊。保證每次上下文切換都是有意義的。減少無謂的進程切換。
以下是異步 IO 的結構:
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.