添加链接 注册    登录
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
拉风的眼镜  ·  Oracle插入100万条记录_oracle ...·  1 年前    · 
快乐的哑铃  ·  MySQL ...·  2 年前    · 
留胡子的水煮鱼  ·  使用记事本编写运行Java程序·  2 年前    · 
逃课的鼠标垫  ·  详解APScheduler如何设置任务不并发 ...·  2 年前    · 
活泼的鸭蛋  ·  vba thisworkbook 切换表 ...·  2 年前    · 
link管理  ›  进程间通信最快速高效的办法是共享内存吗? - 用户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)

 
推荐文章
拉风的眼镜  ·  Oracle插入100万条记录_oracle批量insert几百万条数据-CSDN博客
1 年前
快乐的哑铃  ·  MySQL 中执行计划分析——Optimizer trace表-腾讯云开发者社区-腾讯云
2 年前
留胡子的水煮鱼  ·  使用记事本编写运行Java程序
2 年前
逃课的鼠标垫  ·  详解APScheduler如何设置任务不并发_python_脚本之家
2 年前
活泼的鸭蛋  ·  vba thisworkbook 切换表 执行 速度慢_「小白教程」除了数组,如何提高VBA代码运行速度?..._weixin_39899244的博客-CSDN博客
2 年前
Link管理   ·   Sov5搜索   ·   小百科
link管理 - 链接快照平台