进程间通信那种效率最高_网络编程:进程间通信性能比较

本文探讨了Unix/Linux下各种进程间通信方式的性能,包括匿名管道、命名管道、共享内存、Unix域套接字和网域套接字。通过测试发现,共享内存在加了同步机制后性能下降,而匿名管道和命名管道在不同环境下性能表现不一。作者提供了详细的测试结果和分析,指出在某些情况下,TCP套接字展现出较好的性能稳定性。
摘要由CSDN通过智能技术生成

unix/linux下的进程间通信有很多种方法,如:

  • 匿名管道(pipe):父子进程间的通信
  • 命名管道(fifo):可以和无关联进程的通信
  • 共享内存(shm):可以和无关联进程的通信,需要自己处理进程同步,比如和信号量配合。
  • unix域套接字(unix socket):可以和无关联进程的通信,使用socket接口。
  • 网域套接字(internet socket):可以跨主机通信,使用socket接口。
  • 等等

这些方案各有自己的特点:

  • 比如通常我们能确定共享内存一定是最快的,因为它通过将虚拟内存映射到相同的物理内存,使得两个进程可以操作相同的内存,但是它只是普通的内存操作,需要我们自己处理同步问题,以及如何通知其他进程。总结起来就是不大好用,并且如果加了同步机制之后,性能还会很快吗?
  • 匿名管道很好用,不过只能在有关联的进程间使用(父子进程),命名管道可以在任意进程使用,但的性能到底如何?
  • unix套接字的好处是使用相同的socket接口,我们可以设计一个抽象层,把它和TCP/UDP统一起来。前提当然是假设它在本机的进程间通信要好于TCP/UDP。
  • 网域套接字的好处更明显了,可以本机(使用回环地址),也可以在网络上通信,一套接口通用性很好。

这些IPC方法的吞吐量到底怎么样呢?github上有一个项目对这些方法作了性能测试,不过有一些小问题,我fork了过来修改了一下,并且加上共享内存的测试,放在这里: https://githu

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值