Netty零拷貝

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 
相關文章
相關標籤/搜索