Netty(二)—— NIO 零拷貝機制

G_Assassin發表於2020-11-10

為了防止 OS 本身以及關鍵資料( PCB: 程式控制塊, 儲存了程式執行必要的資訊)受到應用程式的有意或者無意的破壞, 將CPU的執行狀態分為使用者態和核心態

  • 使用者態: 具有較低特權的執行狀態, 僅能執行規定的指令, 訪問指定的暫存器和儲存區
    (應用程式只能在使用者態執行)
  • 核心態: 具有較高的特權, 能執行一切指令, 訪問所有暫存器和儲存區

簡而言之:使用者態只能處理一些特定的作業系統指令,而核心態能執行所有的指令。通常情況下,應用程式處於使用者態執行,當涉及到網路 I/O 時,就會發生使用者態向核心態的轉換(資料的傳送需要核心的支援)。而頻繁的切換狀態會造成效能損耗(需要觸發中斷處理,保護當前 CPU 環境等一系列操作)。

傳統 I/O 的操作流程

傳統 I/O 執行客戶端從磁碟讀取資料,並將資料通過 Socket 傳送至伺服器的流程:
在這裡插入圖片描述
如圖所示:

  • 從磁碟中讀取資料
    首先 Java 應用程式會利用本地方法傳送一個 read 系統呼叫到核心空間,核心程式收到指令後會從磁碟中讀取資料到核心空間的資料緩衝區,然後再講核心空間中的這塊資料拷貝到 Java 應用程式的使用者空間。此時&

相關文章