零拷贝 不是值得不拷贝,而是0次cpu 拷贝。
传统拷贝一个文件并且通过网络IO发送一个文件的发送端文件拷贝过程需要经过
DMA拷贝->cpu拷贝->cpu拷贝-DMA拷贝 第一次 DAM拷贝是磁盘到内核buffer,第二次是内核buffer到用户buffer,第三次是用户buffer到socket buffer ,第4次是 socketbuffer 到 协议引擎
MMAP 可以减少 内核buffer 到 用户buffer 的 CPU拷贝,直接是内核buffer->socket buffer
sendFile(linux2.4) 可以减少 内核buffer->socket buffer 的过程,只做一些简单信息的CPU 拷贝,实现了0次 CPU 拷贝。
NIO 的 transferTo,transferFrom 都是调用的操作系统零拷贝的相关函数(sendFile),在linux 里面没有限制,在window上面有8M每次的限制超过8次需要分段拷贝
标签:socket,buffer,CPU,内核,拷贝,cpu From: https://www.cnblogs.com/cxygg/p/16728671.html