linux – 如何在POSIX中实现零拷贝机制?
发布时间:2020-12-14 01:20:24 所属栏目:Linux 来源:网络整理
导读:我想在两个进程本地/网络之间共享/传输数据.一般IPC机制 ????共享内存和消息队列可用于传输数据.但这些机制 ????涉及多份副本. 我遇到了零复制机制,这减少了复制开销 ????在CPU上. Linux使用sendfile和splice支持这一点.这些API不在POSIX中. ????如何仅使用P
我想在两个进程本地/网络之间共享/传输数据.一般IPC机制
????共享内存和消息队列可用于传输数据.但这些机制 ????涉及多份副本. 我遇到了零复制机制,这减少了复制开销 解决方法
如果将共享数据保留在共享内存中,则两个进程之间的共享内存为零拷贝.否则必须在某处(例如进出共享内存)进行复制.如果其中一个进程将共享数据保留在共享内存中,则可以将此减少为一个副本,而另一个进程只是从那里读取它.
sendfile(2)和vmsplice(2)的Linux手册页没有提到POSIX替代方案,所以我怀疑有一个.要在只有一个副本的进程之间发送数据,请在它们之间设置管道并使用vmsplice将页面放入管道中并进行零拷贝.在接收端,我认为只需使用read(2)将页面从管道中取出. 通过网络,零拷贝更难. Why no zero-copy networking in linux kernel?有一些评论和答案.接收端很难在通常的套接字API之上实现,除非它仅在线程在套接字上的read(2)上被阻塞时才起作用.否则,它如何知道进程的虚拟内存中放置数据包的位置? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- linux – 为什么在raspberry pi驱动程序中有`gpio_request`
- linux – 为什么在raspberry pi驱动程序中有`gpio_request
- linux的ssh服务
- linux – 如何组合shell命令
- 内存管理 – 哪些数据结构使用128MB的1GB Linux内核空间?
- linux – GCC错误消息“错误:不支持’mov’”是什么意思
- linux – 如何从IntelliJ / WebStorm / PhpStorm中的“外部
- 从Linux中的文本文件中提取列(空格或制表符分隔)
- linux基础正则表达式、shell基础、文件查找和压缩
- 如何将SELinux标签分配给带有semanage的符号链接,以便在重新