当前位置: 首页 > 网络知识

进程间通信的6种方式

时间:2026-01-29 09:25:03

1、管道:

1)管道传输数据是单向的,如果想相互通信,需要建立两个管道。

2)管道这种通信方式效率低, 不适合进程间频繁地交换数据。

3)优点是简单,很容易得知管道里的数据已经被另一个进程读取了。

2、消息队列:

1)消息队列是保存在内核中的消息链表,AB进程互相发送消息,只要把数据放在消息队列即可,之后进程遍可以正常返回,另一个进程会从消息队列中读取数据。

2)缺点:消息队列通信过程中,存在用户态与内核态之间的数据拷贝开销。

3、共享内存:

1)操作系统对于内存管理,采用的是虚拟内存技术,也就是每个进程都有自己独立的虚拟内存空间,不同进程的虚拟内存映射到不同的物理内存中。所以,即使进程A和 进程B的虚拟地址是一样的,其实访问的是不同的物理内存地址,对于数据的增删查改互不影响。

2)共享内存的机制,就是拿出一块虚拟地址空间来,映射到相同的物理内存中。这样这个进程写入的东西,另外一个进程马上就能看到了,都不需要拷贝来拷贝去,传来传去, 大大提高了进程间通信的速度。

3)缺点:当多个进程向同一个共享内存中写入数据时可能会产生覆盖(如在工作中,当多人同时修改一份共享文档时别人可能会将你添加的内容修改删除或覆盖),如果只读则没有任何问题。

4、信号量:

1)为了防止多进程竞争共享资源,而造成的数据错乱,所以需要保护机制,使得共享的资源,在任意时刻只能被一个进程访问。正好,信号量就实现了这一保护机制。

2)信号量其实是一个整型的计数器,主要用于实现进程间的互斥与同步。

3)信号量表示资源的数量,控制信号量的方式有两种原子操作:

举例说明:

A:如果要使得两个进程互斥访问共享内存,我们可以初始化信号量为1。

具体的过程如下:

可以发现,信号初始化为1,就代表着是互斥信号量,它可以保证共享内存在任何时刻只有一个进程在访问,这就很好的保护了共享内存。

B:用信号量来实现多进程同步的方式,我们可以初始化信号量为0。

具体过程如下:

可以发现,信号初始化为0,就代表着是同步信号量,它可以保证进程A应在进程B之前执行。

5、信号:

1)信号一般用于一些异常情况下的进程间通信,是一种异步通信,它的数据结构一般就是一个数字。

2)信号是进程间通信机制中唯一的异步通信机制。

3)进程需要为信号设置相应的监听处理,当收到特定信号时,执行相应的操作,类似很多编程语言里的通知机制。

6、套接字:

1)前面提到的管道、消息队列、共享内存、信号量和信号都是在同一台主机上进行进程间通信,那要想跨网络与不同主机上的进程之间通信,就需要Socket通信了。

2)Socket通信不仅可以跨网络与不同主机的进程间通信,还可以在同主机上进程间通信。

小结:



上一篇:CUDA cudaMemcpy函数总结
下一篇:Qt CUDA混合编程BUG(一)
  • 英特尔与 Vertiv 合作开发液冷 AI 处理器
  • 英特尔第五代 Xeon CPU 来了:详细信息和行业反应
  • 由于云计算放缓引发扩张担忧,甲骨文股价暴跌
  • Web开发状况报告详细介绍可组合架构的优点
  • 如何使用 PowerShell 的 Get-Date Cmdlet 创建时间戳
  • 美光在数据中心需求增长后给出了强有力的预测
  • 2027服务器市场价值将接近1960亿美元
  • 生成式人工智能的下一步是什么?
  • 分享在外部存储上安装Ubuntu的5种方法技巧
  • 全球数据中心发展的关键考虑因素
  • 英特尔与 Vertiv 合作开发液冷 AI 处理器

    英特尔第五代 Xeon CPU 来了:详细信息和行业反应

    由于云计算放缓引发扩张担忧,甲骨文股价暴跌

    Web开发状况报告详细介绍可组合架构的优点

    如何使用 PowerShell 的 Get-Date Cmdlet 创建时间戳

    美光在数据中心需求增长后给出了强有力的预测

    2027服务器市场价值将接近1960亿美元

    生成式人工智能的下一步是什么?

    分享在外部存储上安装Ubuntu的5种方法技巧

    全球数据中心发展的关键考虑因素