https://blog.csdn.net/tjreal/article/details/80088139緩存
- netty零拷貝和普通零拷貝不太同樣,注意啦
- 普通零拷貝(kafka):
- 普通拷貝:
- 操做系統將數據從磁盤讀入到內核空間的頁緩存
- 應用程序將數據從內核空間讀入到用戶空間緩存中
- 應用程序將數據寫回到內核空間到 socket 緩存中
- 緩衝區複製到網卡緩衝區
- 普通零拷貝:
- FileChannel 中的 transferTo()
- 一個優化的代碼路徑,用於將數據從頁緩存傳輸到 socket
- netty零拷貝
- 使用直接內存(非堆內存)
- Netty 中的零拷貝徹底是在用戶態的
-
CompositeByteBuf(混合buffer)
- 將多個 ByteBuf 合併爲一個邏輯上的 ByteBuf
- 這些個 ByteBuf 都是單獨存在的,CompositeByteBuf 只是邏輯上是一個總體,
- 這樣就避免了數據的拷貝,實現了零拷貝
- 正常來說拆包後須要合併包到一個buffer,須要屢次拷貝
- Netty 文件傳輸類 DefaultFileRegion 經過 transferTo 方法將文件發送至目標 Channel