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 的結構:
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章