Netty(二)—— NIO 零拷貝機制
為了防止 OS 本身以及關鍵資料( PCB: 程式控制塊, 儲存了程式執行必要的資訊)受到應用程式的有意或者無意的破壞, 將CPU的執行狀態分為使用者態和核心態
- 使用者態: 具有較低特權的執行狀態, 僅能執行規定的指令, 訪問指定的暫存器和儲存區
(應用程式只能在使用者態執行)- 核心態: 具有較高的特權, 能執行一切指令, 訪問所有暫存器和儲存區
簡而言之:使用者態只能處理一些特定的作業系統指令,而核心態能執行所有的指令。通常情況下,應用程式處於使用者態執行,當涉及到網路 I/O 時,就會發生使用者態向核心態的轉換(資料的傳送需要核心的支援)。而頻繁的切換狀態會造成效能損耗(需要觸發中斷處理,保護當前 CPU 環境等一系列操作)。
傳統 I/O 的操作流程
傳統 I/O 執行客戶端從磁碟讀取資料,並將資料通過 Socket 傳送至伺服器的流程:
如圖所示:
- 從磁碟中讀取資料
首先 Java 應用程式會利用本地方法傳送一個 read 系統呼叫到核心空間,核心程式收到指令後會從磁碟中讀取資料到核心空間的資料緩衝區,然後再講核心空間中的這塊資料拷貝到 Java 應用程式的使用者空間。此時&
相關文章
- Netty原始碼解析 -- 零拷貝機制與ByteBufNetty原始碼
- Java NIO - 零拷貝Java
- 框架篇:Linux零拷貝機制和FileChannel框架Linux
- 零拷貝原理
- 檔案操作(二進位制拷貝)
- Netty基礎系列(4) --堆外記憶體與零拷貝Netty記憶體
- 深入剖析Linux IO原理和幾種零拷貝機制的實現Linux
- Java零拷貝一步曲——Linux 中的零拷貝技術JavaLinux
- Java NIO原理及簡單拷貝實列Java
- [JS系列二]談談深拷貝和淺拷貝,如何實現深拷貝JS
- 【Netty技術專題】「原理分析系列」Netty強大特性之ByteBuf零拷貝技術原理分析Netty
- Linux 和 Java 的零拷貝LinuxJava
- MySQL的零拷貝技術MySql
- 一種go協程間記憶體零拷貝的訊息通訊機制Go記憶體
- Netty-BIO、NIO、AIO、零複製-2NettyAI
- 深入理解零拷貝技術
- 如此淺顯易懂的零拷貝
- 淺拷貝&深拷貝
- python 指標拷貝,淺拷貝和深拷貝Python指標
- 淺拷貝與深拷貝
- 淺拷貝和深拷貝
- 深拷貝和淺拷貝
- C++拷貝建構函式(深拷貝,淺拷貝)C++函式
- jquery之物件拷貝深拷貝淺拷貝案例講解jQuery物件
- 一文搞懂Java引用拷貝、淺拷貝、深拷貝Java
- Java深拷貝和淺拷貝Java
- Python淺拷貝與深拷貝Python
- 物件深拷貝和淺拷貝物件
- JavaScript深拷貝和淺拷貝JavaScript
- javascript 淺拷貝VS深拷貝JavaScript
- JavaScript 深度拷貝和淺拷貝JavaScript
- js 淺拷貝和深拷貝JS
- JS深拷貝與淺拷貝JS
- iOS深拷貝和淺拷貝iOS
- python深拷貝與淺拷貝Python
- js 深拷貝和淺拷貝JS
- JavaScript淺拷貝和深拷貝JavaScript
- Netty - 眼熟NIONetty