相关文章推荐
善良的手电筒  ·  海外推送集成文档-个推文档中心·  8 月前    · 
直爽的红烧肉  ·  全美十大航空公司之一:阿拉斯加航空 ...·  10 月前    · 
刚毅的芹菜  ·  【小舞之星-特金奖】D5《一双小小手》少儿舞 ...·  1 年前    · 
狂野的伏特加  ·  连续20个赛季进季后赛有多难?NBA历史仅3 ...·  1 年前    · 
急躁的甜瓜  ·  bootstrap jquery 拖动排序 ...·  1 年前    · 
Code  ›  进程间通信最快速高效的办法是共享内存吗? - 用户tI7boJ 的回答 -
pipe 进程间通信 通信 共享内存
https://www.zhihu.com/question/376947069/answer/2175210256
英姿勃勃的烤面包
2 年前
进程间通信最快速高效的办法是共享内存吗?
知乎用户tI7boJ
知乎用户tI7boJ

只讲windows上的经验,配置是i5 1035g4

windows上的pipe是基于共享内存的,pipe的带宽大约是1GB/s,延迟微秒级。pipe的带宽与zeromq下的IPC socket差不多。

zmq的TCP模式下带宽大约是500MB/s,延迟也是微秒级别,比pipe略高,

共享内存通信一般是进程A将数据拷贝到共享内存中,再将数据从共享内存拷贝到B进程中,首次数据拷贝带宽大约1GB/s(平均带宽只有500MB/s,比管道慢),之后是10GB/s,对于大量数据还可使用多线程,这时候带宽可以到50GB/s。共享内存的延迟主要取决于L3的延迟和内存的延迟,前者大约15ns,后者大约100ns。不过,我们一般会用别的通信方式控制内存共享,此时延迟取决于所使用的通信方式。这意味着在小包模式下,共享内存的吞吐量可以超过1e7tps,如果全部命中L3,则吞吐量可以达到1e8tps级别,而TCP大约是1e5tps。

内存,L1,L2,L3的延迟和带宽

除了共享内存外,我还试过一种小众的IPC方式,叫WriteProcessMemory,用它可以直接将内存复制到另外一个进程空间,而不用共享内存做周转,不过这个函数好像极慢无比,测下来带宽只有200MB/s。

补充:大佬在linux下对pipe做了针对性优化后带宽可以到35GB/s,有兴趣的可以参考 Linux 管道到底能有多快? - 知乎 (zhihu.com)

 
推荐文章
善良的手电筒  ·  海外推送集成文档-个推文档中心
8 月前
直爽的红烧肉  ·  全美十大航空公司之一:阿拉斯加航空 Alaska Air Group, Inc.(ALK) | 美股之家
10 月前
刚毅的芹菜  ·  【小舞之星-特金奖】D5《一双小小手》少儿舞蹈表演_哔哩哔哩_bilibili
1 年前
狂野的伏特加  ·  连续20个赛季进季后赛有多难?NBA历史仅3队达成,湖人绿凯均无缘|邓肯|马刺队|德雷克斯勒|CBA季后赛_网易订阅
1 年前
急躁的甜瓜  ·  bootstrap jquery 拖动排序 jquery拖拽事件_mob6454cc623087的技术博客_51CTO博客
1 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号