sendfile 零拷贝机制
所属分类 architecture
浏览量 1348
普通的网络传输步骤
操作系统将数据从磁盘复制到操作系统内核的页缓存中
应用将数据从内核缓存复制到应用的缓存中
应用将数据写回内核的Socket缓存中
操作系统将数据从Socket缓存区复制到网卡缓存,然后将其通过网络发出
数据从内核模式到用户模式走了一圈,浪费了两次copy
通过sendfile传送文件只需要一次系统调用
将数据从磁盘读取到kernel buffer中
将数据从kernel buffer copy到sokcet buffer中
将socket buffer中数据copy到网卡buffer中发送
Linux2.4内核对sendfile做了进一步改进
将磁盘数据copy到kernel buffer中
向socket buffer中追加当前要发送的数据在kernel buffer中的位置和偏移量
根据socket buffer中的位置和偏移量直接将kernel buffer中的数据copy到网卡上
Java中的零拷贝
FileChannel.transferTo()
NIO
FileChannel.transferTo(long position, long count, WriteableByteChannel target)
上一篇
下一篇
java版hyperLogLog
磁盘io与直接io
Linux IO sync fsync与fdatasync
区块链简介
文字与货币
内存映射文件