zero-copy总结

基本概念
零拷贝,通常在java NIO编程中会使用,比如netty网络工具包。 其真实意思是:
网卡或者其他外设进行io操作时不经过CPU, 而是直接和主memory交互,不经过CPU寄存器,这样可以释放CPU,让CPU做其他更有意义的事。 CPU不会成为网络性能瓶颈,网卡的性能也能打满

0-copy一般是基于DMA, DMA控制器一般是集成在设备端(比如网卡),或者主板上, 硬件上一般不在CPU芯片上

linux内核对应的dma api 有 dma_map_single 。。。 设备驱动申请内存之后 完成IO操作之前,cpu不能再访问这片内存, 完成IO操作之后 dma控制器会通知CPU 其他线程再进行后面的读写操作

rocketMq broker发送消息给消费者时 是从commitLog 内存映射文件中读取 然后放入网卡,其高性能读写也是基于netty的FileRegion 0-copy

zero-copy总结_第1张图片

参考
https://en.wikipedia.org/wiki/Zero-copy
http://www.voidcn.com/article/p-cnfwakoo-bma.html
https://nieyong.github.io/wiki_cpu/CPU%E4%BD%93%E7%B3%BB%E6%9E%B6%E6%9E%84-DMA.html

转载于:https://www.cnblogs.com/yszzu/p/10424559.html

你可能感兴趣的:(zero-copy总结)