使用`splice` for Linux …其他系统还有什么?

使用`splice` for Linux …其他系统还有什么?,第1张

概述在最近的 Linux内核上,将文件或文件子集复制到另一个文件的最快方法是使用非常好的拼接系统调用.该系统使内核能够(几乎)直接管理传输,而无需将数据复制到用户区内存. 现在,我有兴趣为其他系统找到类似的东西,特别是Windows和BSD / MacOS X(我愿意在Obj-C中编写一些代码,在不太可能的情况下,有一个API无法从原始C访问). 谢谢 注意我假设Windows下最快的完整文件副本是C 在最近的 Linux内核上,将文件或文件子集复制到另一个文件的最快方法是使用非常好的拼接系统调用.该系统使内核能够(几乎)直接管理传输,而无需将数据复制到用户区内存.

现在,我有兴趣为其他系统找到类似的东西,特别是windows和BSD / MacOS X(我愿意在Obj-C中编写一些代码,在不太可能的情况下,有一个API无法从原始C访问).

谢谢

注意我假设windows下最快的完整文件副本是copyfile.但是只复制一个文件范围呢?

注意我正在处理对性能敏感的代码,它应该适用于各种大容量存储设备(即从Android智能手机到NFS挂载).当然,我愿意为不同的 *** 作系统编写不同的实现.

注意目前,我使用linux / AndroID下的splice,BSD / Mac OS X下的copyfile,windows下的copyfile,以及文件中范围的读/写回退.

解决方法 在BSD中,只要目标文件描述符是套接字,sendfile()就会填充此角色.

在所有POSIX *** 作系统中,memmap()可用于实现此目的,方法是映射整个文件,然后对映射数据调用write().由于您从未在流程中访问此内存,因此它仍然可以具有零拷贝性能.

几乎在任何地方,read()/ write()组合都运行良好,速度非常快.零拷贝很酷,但是使用页面大小的缓冲区~4096,你将会接近相同的速度,但每个人都能理解代码.

@H_502_31@ 总结

以上是内存溢出为你收集整理的使用`splice` for Linux …其他系统还有什么?全部内容,希望文章能够帮你解决使用`splice` for Linux …其他系统还有什么?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/1025661.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存