linux – 如何在POSIX中实现零拷贝机制?

linux – 如何在POSIX中实现零拷贝机制?,第1张

概述我想在两个进程本地/网络之间共享/传输数据.一般IPC机制     共享内存和消息队列可用于传输数据.但这些机制     涉及多份副本. 我遇到了零复制机制,这减少了复制开销     在CPU上. Linux使用sendfile和splice支持这一点.这些API不在POSIX中.     如何仅使用POSIX API实现零拷贝? 如果将共享数据保留在共享内存中,则两个进程之间的共享内存为零拷贝. 我想在两个进程本地/网络之间共享/传输数据.一般IPC机制
    共享内存和消息队列可用于传输数据.但这些机制
    涉及多份副本.

我遇到了零复制机制,这减少了复制开销
    在cpu上. Linux使用sendfile和splice支持这一点.这些API不在POSIX中.
    如何仅使用POSIX API实现零拷贝?

解决方法 如果将共享数据保留在共享内存中,则两个进程之间的共享内存为零拷贝.否则必须在某处(例如进出共享内存)进行复制.如果其中一个进程将共享数据保留在共享内存中,则可以将此减少为一个副本,而另一个进程只是从那里读取它.

sendfile(2)和vmsplice(2)的linux手册页没有提到POSIX替代方案,所以我怀疑有一个.要在只有一个副本的进程之间发送数据,请在它们之间设置管道并使用vmsplice将页面放入管道中并进行零拷贝.在接收端,我认为只需使用read(2)将页面从管道中取出.

通过网络,零拷贝更难. Why no zero-copy networking in linux kernel?有一些评论和答案.接收端很难在通常的套接字API之上实现,除非它仅在线程在套接字上的read(2)上被阻塞时才起作用.否则,它如何知道进程的虚拟内存中放置数据包的位置?

总结

以上是内存溢出为你收集整理的linux – 如何在POSIX中实现零拷贝机制?全部内容,希望文章能够帮你解决linux – 如何在POSIX中实现零拷贝机制?所遇到的程序开发问题。

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

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

原文地址:https://54852.com/yw/1027367.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存