零拷贝介绍
- 零拷贝是网络编程的关键, 很多性能优化都需要零拷贝。
- 在 Java程序中, 常用的零拷贝方式有m(memory)map[内存映射] 和 sendFile。它们在OS中又是怎样的设计?
- NIO中如何使用零拷贝?
NIO 与 传统IO对比
零拷贝理解
- 零拷贝是从操作系统的角度来看的。内核缓冲区之间, 没有数据是重复的(只有kernel buffer有一份数据)。
- 零拷贝不仅仅带来更少的数据复制, 还能带来其他的性能优势: 如更少的上下文切换, 更少的 CPU 缓存伪共享以及无CPU校验和计算。
mmap 与 sendFile 总结
- mmap适合小数据两读写, sendFile适合大文件传输
- mmap 需要3次上下文切换, 3次数据拷贝; sendFile 需要3次上下文切换, 最少2次数据拷贝。
- sendFile 可以利用 DMA 方式, 减少 CPU 拷贝, 而 mmap则不能(必须从内核拷贝到Socket缓冲区)。
posted on 2020-05-14 11:27
长戟十三千 阅读(673)
评论(0) 编辑 收藏 引用 所属分类:
编程技巧随笔