进程间基于共享存储区的通信_C++ 进程通信

一:需要进程通信的场景

数据传输:一个进程将数据发送到另一个进程

共享数据:多个进程操作共享数据,一个进程修改,其他进程可以立刻看到

通知事件:一个进程向另一个(组)进程发送数据,通知有事件发生

进程控制:有些进程希望控制另一个进程的过程。

二:通信方式

1:管道

2:信号

3:消息队列

4:共享内存

5:存储映射IO

6:信号量

7:套接字

三:具体详解

1:管道(是一种单向通信的机制,半双工)

无名管道:用于存在父子关系,兄弟关系的进程中;单向传输,若双向通信,需要两条管道;特殊的文件,存在内存中。

有名管道:可以用于任意的进程中通信;单向传输,若双向通信,需要两条管道;是FIFO文件,存在文件系统中。

管道特点:

单向通信;支持无格式字节流;有缓存大小限制

2:信号:

是对中断机制软件上的模拟,信号是异步的,不必通过任何操作来等待信号过来。

3:消息队列:

同一台机器上的进程间通信,它和管道很相似,系统内核是--消息链表,克服了信号传递信息小,管道只能传输无格式数据与受缓存大小限制。

过程:创建或打开消息队列,添加消息,读取消息和控制消息队列。

4;共享内存

提供服务器进程与客户端进程通信,不需要数据复制,速度最快。一个进程写共享内存时候,另一个不可以读,通过信号量实现共享内存访问。

5:存储映射IO

存储映射函数mmap,通过映射一个普通的文件实现共享内存(将文件映射到虚拟内存上,通过访问修改内存,实现访问修改文件)

共享内存与存储映射IO比较:

a:mmap在磁盘上建立一个文件,每个线程的地址空间开辟一块空间进行映射,而共享内存是共享一块物理内存区域,所mmap映射文件保存在硬盘上,不会丢失,二共享内存会丢失。

6:信号量

信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。

7:套接字

可以用于不同机器的进程间通信。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值