进程间通信方式有哪些? 进程间通信的方式有哪些?
进程间通信方式有哪些
今天为大家介绍进程间通信方式有哪些的相关话题,接下来IT袋网小编为大家介绍。
由于每个进程的用户空间都是独立的,不能相互访问,这时就需要借助内核空间来实现进程间通信,原因很简单,每个进程都是共享一个内核空间。
Linux内核提供了不少进程间通信的方式,其中最简单的方式就是管道,管道分为「匿名管道」和「命名管道」。

匿名管道
顾名思义,它没有名字标识,匿名管道是特殊文件只存在于内存,没有存在于文件系统中,shell 命令中的「|」竖线就是匿名管道,通信的数据是无格式的流并且大小受限。
通信的方式是单向的,数据只能在一个方向上流动,如果要双向通信,需要创建两个管道,再来匿名管道是只能用于存在父子关系的进程间通信,匿名管道的生命周期随着进程创建而建立,随着进程终止而消失。
命名管道
突破了匿名管道只能在亲缘关系进程间的通信限制,因为使用命名管道的前提,需要在文件系统创建一个类型为 p 的设备文件,那么毫无关系的进程就可以通过这个设备文件进行通信。
另外,不管是匿名管道还是命名管道,进程写入的数据都是缓存在内核中,另一个进程读取数据时候自然也是从内核中获取,同时通信数据都遵循先进先出原则,不支持 lseek 之类的文件定位操作。
消息队列
克服了管道通信的数据是无格式的字节流的问题,消息队列实际上是保存在内核的「消息链表」,消息队列的消息体是可以用户自定义的数据类型,发送数据时,会被分成一个一个独立的消息体。
当然接收数据时,也要与发送方发送的消息体的数据类型保持一致,这样才能保证读取的数据是正确的。
消息队列通信的速度不是最及时的,毕竟每次数据的写入和读取都需要经过用户态与内核态之间的拷贝过程。
共享内存
可以解决消息队列通信中用户态与内核态之间数据拷贝过程带来的开销,它直接分配一个共享空间,每个进程都可以直接访问,就像访问进程自己的空间一样快捷方便。
不需要陷入内核态或者系统调用,大大提高了通信的速度,享有最快的进程间通信方式之名。
但是便捷高效的共享内存通信,带来新的问题,多进程竞争同个共享资源会造成数据的错乱。
那么,就需要信号量来保护共享资源,以确保任何时刻只能有一个进程访问共享资源,这种方式就是互斥访问。
相关阅读
-
魔兽世界70级数据库怎么用 魔兽335卡70级最强dps排行
小编为大家说一说魔兽世界70级数据库怎么用和魔兽335卡70级最强dps排行的话题,请看下面详细的介绍。 魔兽世界TBC前夕开放之后,不少玩家都前往卡拉赞门口刷小怪,希望可以获得70级的道具
-
js支付是什么 jsapi支付什么意思
全面的为大家介绍jsapi支付什么意思方面的讲解,JSAPI支付是指用户在微信中打开商户的H5页面,商户在H5页面通过调用微信支付提供的JSAPI接口调起微信支付模块来完成支付。适用于在公众号、
-
自己制作网站需要多少钱 开网站需要投资的费用
今天小编详解自己制作网站需要多少钱和开网站需要投资的费用方面的介绍,接下来IT袋带大家一起了解。 做一个网站,所花的几百块钱,只是一个模板的基础费用,你还要去做一些设置工作
-
服务器怎么维护 服务器维护有哪些内容?
今日IT小知识分享:服务器怎么维护方面的讲解,接下来小编为网友介绍。 维护是保证服务器稳定运行的必要步骤。作为一名服务器管理员,必须掌握服务器维护的技巧和方法,及时检查、更


