Yor*_*ric 5 c windows macos bsd operating-system
在最近的Linux内核上,将文件或文件子集复制到另一个文件的最快方法是使用非常好的splice
系统调用.该系统使内核能够(几乎)直接管理传输,而无需将数据复制到用户区内存.
现在,我有兴趣为其他系统找到类似的东西,特别是Windows和BSD/MacOS X(我愿意在Obj-C中编写一些代码,在不太可能的情况下,有一个API无法从原始C访问).
谢谢
注意我假设Windows下最快的完整文件副本是CopyFile
.但是只复制一个文件范围呢?
注意 我正在处理对性能敏感的代码,它应该适用于各种大容量存储设备(即从Android智能手机到NFS挂载).当然,我愿意为不同的操作系统编写不同的实现.
注意目前,我使用splice
Linux下的Linux/Android copyfile
,CopyFile
在Windows 下的BSD/Mac OS X 下,并在文件中回退到read
/ write
用于范围.
sendfile()
只要目标文件描述符是套接字,BSD就会填充此角色.
在所有POSIX操作系统中,memmap()
可以通过映射整个文件,然后调用write()
映射数据来实现此目的.由于您从未在流程中访问此内存,因此它仍然可以具有零拷贝性能.
几乎在所有地方,这种read()/write()
组合运作良好,而且速度非常快.零拷贝很酷,但是使用页面大小的缓冲区~4096,你将会接近相同的速度,但每个人都能理解代码.
归档时间: |
|
查看次数: |
903 次 |
最近记录: |