https://blog.csdn.net/weixin_42096901/article/details/103017044
https://www.jianshu.com/p/193cae9cbf07
- 硬件
- 中断
- DMA
- linux
- read,write:图一,4次copy,2次系统调用即4次上下文切换
- mmap:图二,3次copy,2次系统调用4次上下文切换
- sendFile:
- 图三,3次copy,1次系统调用2次上下文切换。
- 图四,配合硬件的DMA支持,实现2次copy。
- https://www.cnblogs.com/rickiyang/p/13265043.html
- JDK
- FileChannel
- https://blog.csdn.net/qq_21125183/article/details/88701448
- https://www.cnblogs.com/cscw/p/13883420.html
- map():mmap
- transferTo()
- transferFrom()
- DirectByteBuffer:直接内存
- FileChannel
- netty
- https://zhuanlan.zhihu.com/p/88599349
- 使用直接内存ByteBuffer进行收发操作,避免了堆内存和直接内存的拷贝动作
- FileChannel.transferTo 包装成 FileRegion,使用FileRegion直接把文件缓冲区数据发生到目标Channel
- 直接内存 ByteBuf 合并操作零拷贝,CompositeByteBuf类,来合并多个ByteBuf,只是把多个ByteBuf进行逻辑上的合并,实际上没有进行内存拷贝
- kafka。FileChannel.transferTo() 使用了零拷贝
- rocketmq,mmap写文件,采用netty通信