进程间的通信方式

浏览量:440
时间: 2024-01-31 11:34:23

管道 

管道是⼀种把两个进程之间的标准输入和标准输出连接起来的机制,可分为⽆名管道和有名管道,⽤于 具有亲缘关系进程间的通信。有名管道克服了没有名字的限制,因此允许⽆亲缘关系进程间的通信。

特点

①只能在有亲缘关系的进程之间进⾏通信,也就是在⽗⼦进程之间通信 ②单向通信,⼀个读端,⼀个写端。如果要双向通信就要建立两个管道 ③接收数据流,与数据格式⽆关 ④⼀般⽽⾔,进程退出时管道即被释放,因此管道的⽣命周期会随进程的关闭⽽消亡 ⑤同步互斥原则,内核会对管道操作进⾏同步和互斥 

⽆名管道参考 

有名管道读操作参考 

有名管道写操作参考


信号

信号机制是UNIX系统中最为古老的进程之间通信机制。它⽤于⼀个进程或多个进程之间传递异步信号, 来通知进程有某种事件发⽣,除了⽤于进程间通信外,使⽤信号还可以使进程发送信号给进程本⾝。信号参考 


消息队列 

消息队列是内核地址空间中的消息的链表,通过Linux内核在进程之间传递内容。消息顺序地发送到消息 队列中,并以⼏种不同的⽅式从队列中获取,每个消息队列可以⽤IPC标识符唯⼀的进⾏标识。不同的消 息队列之间是相互独立的,每个消息队列中的消息构成⼀个独立的链表。有写权限的进程可以对消息队 列添加消息,有读权限的进程可以对消息队列读取信息 

特点

①消息队列克服了信号承载信息量少,管道只能承载⽆格式字节流以及缓冲区⼤⼩受限的缺点。 消息队列 是基于消息的,⽽管道是基于字节流的,且消息队列的读取不⼀定先入先出 

②消息队列中每个消息的最⼤⻓度是有上限的,每个消息队列的总的字节数也是有上限的,系统 上消息队 列的总数也有⼀个上限

消息队列读参考 

消息队列写参考 


共享内存 

共享内存是在多个进程之间共享⼀块内存区域的⼀种进程间的通信⽅式,它是通过在多个进程之间对内 存段进⾏映射的⽅式来实现共享内存的,是进程间通信最快捷的⽅式,之所以最快,是因为共享内存⽅ 式的通信没有中间过程,⽽管道、消息队列等⽅式则是需要将数据通过中间机制进⾏转换。共享内存往 往与其他通信机制(如信号量)结合使⽤,来达到进程间的同步及互斥

特点

①共享内存就是允许两个不相关的进程访问同⼀个内存 ②共享内存是两个正在运⾏的进程之间共享和数据的最有效的⽅式 ③共享内存不提供任何互斥和同步机制,⼀般⽤信号量对临界资源进⾏保护 ④不同进程之间共享的内存通常安排为同⼀段物理内存 


共享内存读参考 

共享内存写参考


信号量 

信号量是⼀种计数器,⽤来控制对多个进程共享的资源所进⾏的访问,它们常常被⽤作⼀个锁机制,在 某个进程正在对特定资源进⾏操作时,信号量可以防⽌另⼀个进程去访问它。简单来说就是信号量是⼀ 个特殊的变量,程序对其访问都是原⼦操作,且只允许对它进⾏P(申请)V(释放)操作


socket

最为⼀般的进程间通信机制。可⽤于不同机器之间的不同进程之间的通信 

image.png

声明:本网站所收集的部分公开资料来源于互联网,转载的目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。仅供学习交流使用,不构成商业目的。版权归原作者所有,如果您发现网站上有侵犯您的知识产权的作品,请与我们取得联系,我们会及时删除。侵权投诉

上一篇

coap
相关推荐HOT