您好试着理解零拷贝原则。维基百科说
多个操作系统支持通过零拷贝文件 特定的API。
Linux内核支持通过各种系统调用进行零拷贝 as sys / socket.h的sendfile,sendfile64和splice。他们之中有一些是 在POSIX中指定,因此也存在于BSD内核或IBM中 AIX,有些是Linux内核API独有的。
Microsoft Windows支持通过TransmitFile API进行零拷贝。
Java输入流可以通过支持零拷贝 java.nio.channels.FileChannel的transferTo()方法,如果是底层的 操作系统也支持零拷贝。[4]
我没有看到任何提及OSX虽然它说存在于BSD内核中。
但是http://www.bigfastblog.com/zero-copy-transfer-data-faster-in-ruby博客表示它在OSX中不受支持。
答案 0 :(得分:4)
OS X有man page for sendfile。虽然它没有引用零拷贝,但它确实将sendfile称为系统调用(与open / read / write / close周围的某个包装器相对)所以我认为假设它不涉及将文件复制到用户空间是非常安全的。