Java Nio 零拷貝

傳統的IO處理方式


上下文切換包括:用戶空間(User space),內核空間(Kemel space)
首先,當讀取一個硬盤上的文件時,上下文會從用戶空間切換到內核空間,由內核空間以DMA(Direct Memory Access)直接內存訪問的方式將數據從硬盤(Hardware)複製到內核緩衝區,緊接着將內核緩衝區中的數據複製到用戶緩衝區,上下文切換回用戶空間。如果有邏輯處理,在邏輯執行完畢,會將用戶緩衝區的數據再複製回內核緩衝區,上下文切換到內核空間,然後再將數據從內核緩衝區複製到IO通道(Socket)緩衝區,再寫到目的地,發送完畢後上下文再次切換回用戶空間。整個過程發生了4次上下文切換




最佳的NIO處理方式 linux2.4版本後操作系統支持的零拷貝機制


上下文切換包括:用戶空間(User space),內核空間(Kemel space)
首先,當讀取一個硬盤上的文件時,上下文會從用戶空間切換到內核空間,由內核空間以DMA(Direct Memory Access)直接內存訪問的方式將數據從硬盤複製到內核緩衝區,然後只將文件描述符(不包括文件數據)的信息複製到IO通道(Socket)緩衝區中,文件描述符中包含兩方面信息,一、文件在內核緩衝區中內存地址 二、文件長度。最後,通過gathering同時從內核緩衝區和Socket緩衝區將數據寫到目的地。將上下文切換回用戶空間。整個過程發生2次上下文切換


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章