91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

NIO的概念有哪些

發布時間:2022-03-31 15:23:08 來源:億速云 閱讀:139 作者:iii 欄目:編程語言

這篇文章主要介紹了NIO的概念有哪些的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇NIO的概念有哪些文章都會有所收獲,下面我們一起來看看吧。

緩沖區(Buffers)

新的 Buffer 類是常規 Java 類和通道之間的紐帶。原始數據元素組成的固定長度數組,封裝在包含狀態信息的對象中,存入緩沖區。緩沖區提供了一個會合點:通道既可提取放在緩沖區中的數據(寫),也可向緩沖區存入數據供讀取(讀)。此外,還有一種特殊類型的緩沖區,用于內存映射文件。

通道(Channels)

NIO 新引入的最重要的抽象是通道的概念。Channel 對象模擬了通信連接,管道既可以是單向的(進或出),也可以是雙向的(進和出)。可以把通道想象成連接緩沖區和 I/O 服務的捷徑

文件鎖定和內存映射文件(File locking and memory-mapped files)

新的 FileChannel 對象包含在 java.nio.channels 軟件包內,提供許多面向文件的新特 性,其中最有趣的兩個是文件鎖定和內存映射文件。
在多個進程協同工作的情況下,要協調各個進程對共享數據的訪問,文件鎖定是必不可少的工具。

將文件映射到內存,這樣在您看來,磁盤上的文件數據就像是在內存中一樣。這利用了操作系統的虛擬內存功能,無需在內存中實際保留一份文件的拷貝,就可實現文件內容的動態高速緩存。

套接字(Sockets)

套接字通道類為使用網絡套接字實現交互提供了新方法。套接字通道可工作于非塊模式,并可與選擇器一同使用。因此,多個套接字可實現多路傳輸,管理效率也比 java.net 提供的傳統套接字更高。三個新套接字通道,即 ServerSocketChannel、SocketChannel 和 DatagramChannel

選擇器(Selectors)

選擇器可實現就緒性選擇。Selector 類提供了確定一或多個通道當前狀態的機制。使用選擇 器,借助單一線程,就可對數量龐大的活動 I/O 通道實施監控和維護。

正則表達式(Regular expressions)

新增的 java.util.regex 軟件包將類似 Perl 語言的正則表達式處理機制引入 Java。這一人 們期盼已久的特性有著廣泛用途。

新的正則表達式 API 之所以被看成是 NIO 的組成部分,是因 JSR 51 把它與其他 NIO 特性放在一起作了詳細說明。雖然它在許多方面與 NIO 的其他組成部分缺乏平行關系,但它在文件處理等眾多領域都是極其有用的。

字符集(Character sets)
java.nio.charsets 提供了新類用于處理字符與字節流之間的映射關系。您可以對字符轉換映射方式進行選擇,也可以自己創建映射。

磁盤I/O的示例

NIO的概念有哪些

圖中明顯忽略了很多細節,僅顯示了涉及到的基本步驟。

如圖

注意圖中用戶空間和內核空間的概念。用戶空間是常規進程所在區域。JVM 就是常規進程,駐守于用戶空間。用戶空間是非特權區域:比如,在該區域執行的代碼就不能直接訪問硬件設備。內核空間是操作系統所在區域。內核代碼有特別的權力:它能與設備控制器通訊,控制著用戶區域進程的運行狀態,等等。最重要的是,所有 I/O 都直接(如這里所述)或間接(見 1.4.2 小節)通過內核空間。

當進程請求 I/O 操作的時候,它執行一個系統調用(有時稱為陷阱)將控制權移交給內核。C/C++程序員所熟知的底層函數 open( )、read( )、write( )和 close( )要做的無非就是建立和執行適當 的系統調用。當內核以這種方式被調用,它隨即采取任何必要步驟,找到進程所需數據,并把數據傳送到用戶空間內的指定緩沖區。內核試圖對數據進行高速緩存或預讀取,因此進程所需數據可能已經在內核空間里了。如果是這樣,該數據只需簡單地拷貝出來即可。如果數據不在內核空間,則進程被掛起,內核著手把數據讀進內存。

看了圖 1-1,您可能會覺得,把數據從內核空間拷貝到用戶空間似乎有些多余。為什么不直接讓磁盤控制器把數據送到用戶空間的緩沖區呢?這樣做有幾個問題。首先,硬件通常不能直接訪問用戶空間 1。其次,像磁盤這樣基于塊存儲的硬件設備操作的是固定大小的數據塊,而用戶進程請求的可能是任意大小的或非對齊的數據塊。在數據往來于用戶空間與存儲設備的過程中,內核負責數據的分解、再組合工作,因此充當著中間人的角色。

發散/匯聚

NIO的概念有哪些

許多操作系統能把組裝/分解過程進行得更加高效。根據發散/匯聚的概念,進程只需一個系統調用,就能把一連串緩沖區地址傳遞給操作系統。然后,內核就可以順序填充或排干多個緩沖區,讀的時候就把數據發散到多個用戶空間緩沖區,寫的時候再從多個緩沖區把數據匯聚起來這樣用戶進程就不必多次執行系統調用(那樣做可能代價不菲),內核也可以優化數據的處理過程,因為它已掌握待傳輸數據的全部信息。如果系統配有多個 CPU,甚至可以同時填充或排干多個緩沖區。

虛擬內存

所有現代操作系統都使用虛擬內存。虛擬內存意為使用虛假(或虛擬)地址取代物理(硬件RAM)內存地址。這樣做好處頗多,總結起來可分為兩大類:

1. 一個以上的虛擬地址可指向同一個物理內存地址。

2. 虛擬內存空間可大于實際可用的硬件內存。

設備控制器不能通過 DMA 直接存儲到用戶空間,但通過利用上面提到的***項,則可以達到相同效果。把內核空間地址與用戶空間的虛擬地址映射到同一個物理地址,這樣,DMA 硬件(只能訪問物理內存地址)就可以填充對內核與用戶空間進程同時可見的緩沖區

NIO的概念有哪些

如圖,進程虛擬內存和內核虛擬內存映射到的物理地址都一樣,這樣DMA寫到實際的物理內存后,兩個緩沖區指向的物理地址都一樣,那么他們就同時能訪問到數據了。

但前提條件是,內核與用戶緩沖區必須使用相同的頁對齊,緩沖區的大小還必須是磁盤控制器塊大小(通常為 512 字節磁盤扇區)的倍數。操作系統把內存地址空間劃分為頁,即固定大小的字節組。內存頁的大小總是磁盤塊大小的倍數,通常為 2 次冪(這樣可簡化尋址操作)。典型的內存頁為 1,024、2,048 和 4,096 字節。虛擬和物理內存頁的大小總是相同的。

NIO的概念有哪些

如上圖顯示了來自多個虛擬地址的虛擬內存頁是如何映射到物理內。

內存頁面調度

為了支持虛擬內存的第二個特性(尋址空間大于物理內存),就必須進行虛擬內存分頁(經常稱為交換,雖然真正的交換是在進程層面完成,而非頁層面)。依照該方案,虛擬內存空間的頁面能夠繼續存在于外部磁盤存儲,這樣就為物理內存中的其他虛擬頁面騰出了空間。從本質上說,物理內存充當了分頁區的高速緩存;而所謂分頁區,即從物理內存置換出來,轉而存儲于磁盤上的內存頁面。

關于“NIO的概念有哪些”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“NIO的概念有哪些”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

nio
AI

扎囊县| 区。| 青田县| 镇雄县| 绍兴县| 探索| 黎川县| 白朗县| 师宗县| 广宁县| 韶关市| 胶南市| 禹州市| 呼和浩特市| 连平县| 盘锦市| 尼勒克县| 钟山县| 云霄县| 基隆市| 平湖市| 额尔古纳市| 吴江市| 沙田区| 霞浦县| 安化县| 贵南县| 南宫市| 海门市| 泸州市| 贵定县| 崇文区| 常山县| 梅河口市| 德化县| 当涂县| 肇州县| 高安市| 双城市| 洛浦县| 兴文县|