本文主要是介绍零拷贝,sendfile与mmap,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
sendfile
Java中通过FIleChannel的transferFrom transferTo接口调用
sendfile是去掉了两次用户空间和内核空间的copy,节省了一次系统调用
copy在内核执行:kernel buffer->socket buffer,如果硬件支持 scatter-n-gather,这次copy也可以省了,通过DMA直接从kernel buffer读取即可
mmap
通过虚拟内存直接映射内核buffer, 之后直接操作这部分内存, 内核异步刷写
避免copy和系统调用
虽然避免了额外拷贝但是不保证一定快,这要依赖具体OS实现,因为需要维护其他信息(映射,寻址及TLB),缺页同样耗费要大一些(更新内存空间和TLB)
这篇关于零拷贝,sendfile与mmap的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!