都为共享,有何区别?(详细说一下进程通信中共享存储和管道通信的区别)

什么是进程通信?

        假想一下,你现在正悠闲的躺在床上刷着抖音,正好看到了一个有意思的小视频,准备分享给你的crush,你点击了分享按钮,确认分享。  结果:你还不是她的朋友,请先发送朋友验证请求,对方验证通过后,才能聊天……

        咳咳,言归正传。当你将抖音的视频分享给微信时,原本是抖音的链接,你将它分享到了微信,在这个时候就发生了进程通信。因此,我们就知道了什么是进程通信。进程间通信(Inter-Process Communication,IPC)是指两个进程之间产生数据交互。

进程通信的三种方式:

一:共享存储

        就是设置一个共享内存区域,并映射到进程的虚拟地空间。

 共享存储有两种共享方式:

        基于数据结构的共享(低级):比如共享空间里只能放一个长度为10的数组。这种共享方式速度慢,限制多,是一种低级通信方式。

        基于存储区的共享(高级):操作系统在内存中划出一块共享存储区,数据的形式,存放位置都由通信进程控制,而不是操作系统。这种共享方式速度很快,是一种高级通信方式。

二:消息传递

        进程间的数据交换以格式化的消息为单位。进程通过操作系统提供的"发送消息/接收消息"两个原语进行数据交换。

消息传递有两种方式:1.直接通信方式:点名道姓的传递;2.间接通信方式:以信箱作为中间体进行消息传递。

三:管道通信

        设置一个特殊的共享文件(管道,又名pipe文件),其实就是在内存中开辟一个内存缓冲区。传消息时一个进程就会在管道的一边写数据,另一个进程在管道的另一边读数据,这样就完成了进程通信。

共享存储和管道通信的区别:

        在上面我们看到共享存储和管道通信它们都是设置一个共享区域,那这两个共享区域有什么不同呢?

        对于共享存储方式来说,进程可以在共享区域中随意读数据或者随意写数据,没有任何的限制。但是对于管道通信中的共享文件来说,一个进程要写数据的时候,不是随意写的,而是先往头部写,依次往后写,如果内存写满的话,写进程将会被阻塞。同样的,对于读进程来说,也是先从头部读,依次往后,并且管道中的数据一旦被读走,就会彻底消失,如果内存读完的话,读进程将会被阻塞。从这里我们可以看出,管道通信就相当于一个循环队列,只能从头往尾写,从头往尾读,并且管道通信只能实现半双工通信。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值