本地的进程间通信—共享内存

共享内存是进程间通信高效的方式,允许进程直接访问同一块物理内存,但需配合信号量等机制同步访问。它避免了数据复制,提高了通信效率。与管道、消息队列等相比,共享内存只需两次数据拷贝。创建、映射、通信、撤销映射和删除是实现共享内存的步骤。其他通信方式包括管道、信号量和消息队列。
摘要由CSDN通过智能技术生成

共享内存介绍:

共享内存式进程间通信中最简单的方式之一。共享内存是在两个正在运行的进程之间共享和传递数据的一种非常有效的方式。共享内存允许两个或多个进程访问同一块内存,就如同malloc()函数向不同进程返回了指向同一个物理内存区域的指针。当一个进程改变了这块地址中的内容的时候,其他进程都会察觉到这个更改。

但有一点特别要注意:共享内存并未提供同步机制。也就是说,在第一个进程结束对共享内存的写操作之前,并无自动机制可以阻止第二个进程开始对它进行读取。所以我们通常需要用其他的机制来同步对共享内存的访问,例如信号量或者互斥锁。

这里写图片描述

这里写图片描述

这里写图片描述

共享内存的好处:

因为所有进程共享同一块内存,共享内存在各种进程间通信方式中具有最高的效率。访问共享内存区域和访问进程独有的内存区域一样快,并不需要通过系统调用或者其它需要切入内核的过程来完成。同时它也避免了对数据的各种不必要的复制。

对于像管道和消息队列等通信方式,则需要在内核和用户进行四次的数据拷贝,而共享内存则只拷贝两次数据:一次从输入文件到共享内存区,另一次从共享内存区到输出文件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值