服务器搭建网站软件,西宁做网站治愈君博i,牛商网专注营销型网站建设,山西智能建站系统价格网络专题 文件传输mmapwritesend file大文件传输过程 文件传输
传统的文件传输过程 在这个过程中发生了4次用户态与内核态之间的切换,4次数据拷贝分别是
read系统调用陷入内核,read完成返回write调用陷入内核,write返回
4次数据拷贝分别是 磁盘-内核缓冲区-用户缓冲… 网络专题 文件传输mmapwritesend file大文件传输过程 文件传输
传统的文件传输过程 在这个过程中发生了4次用户态与内核态之间的切换,4次数据拷贝分别是
read系统调用陷入内核,read完成返回write调用陷入内核,write返回
4次数据拷贝分别是 磁盘-内核缓冲区-用户缓冲区-socket缓冲区-网卡缓冲区 显然有些拷贝的开销是没有必要承受的,有如下两种解决方案
mmapwrite
使用mmap将文件映射到内存中,然后write mmap中的内容即可,整个操作如下图 这样减少了一次数据拷贝的过程
send file
为了解决这一个问题,内核提供了一个新的系统调用,sendfile,并且根据系统是否支持SG-DMA,有如下两种情况 不支持的情况如下 这不是真正的零拷贝,真正的零拷贝在支持SG-DMA的情况下发生
大文件传输过程
前面的文件传输过程第一步都是将磁盘文件拷贝到内核缓冲区(Page Cache),但是大文件传输因为文件较大,会造成Page Cache缓冲直接失效,反而影响效率,这个时候的解决方案是异步 直接IO