进程间通信⽅式以及各⾃的优缺点
1)管道
管道分为有名管道和⽆名管道
⽆名管道是⼀种半双⼯的通信⽅式,数据只能单向流动,⽽且只能在具有亲缘关系的进程间使⽤.进程的亲缘关系⼀般指的是⽗⼦关系。⽆明管道⼀般⽤于两个不同进程之间的通信。当⼀个进程创建了⼀个管道,并调⽤fork创建⾃⼰的⼀个⼦进程后,⽗进程关闭读管道端,⼦进程关闭写管道端,这样提供了两个进程之间数据流动的⼀种⽅式。
有名管道也是⼀种半双⼯的通信⽅式,但是它允许⽆亲缘关系进程间的通信。
⽆名管道:优点:简单⽅便;缺点:1)局限于单向通信2)只能创建在它的进程以及其有亲缘关系的进程之间;3)缓冲区有限;
进程通信方式有名管道:优点:可以实现任意关系的进程间的通信;缺点:1)长期存于系统中,使⽤不当容易出错;2)缓冲区有限
2)信号量
信号量是⼀个计数器,可以⽤来控制多个线程对共享资源的访问.,它不是⽤于交换⼤批数据,⽽⽤于多线程之间的同步.它常作为⼀种锁机制,防⽌某进程在访问资源时其它进程也访问该资源.因此,主要作为进程间以及同⼀个进程内不同线程之间的同步⼿段.
优点:可以同步进程;缺点:信号量有限
3)信号
信号是⼀种⽐较复杂的通信⽅式,⽤于通知接收进程某个事件已经发⽣.
4)消息队列
消息队列是消息的链表,存放在内核中并由消息队列标识符标识.消息队列克服了信号传递信息少,管道只能承载⽆格式字节流以及缓冲区⼤⼩受限等特点.消息队列是UNIX下不同进程之间可实现共享资源的⼀种机制,UNIX允许不同进程将格式化的数据流以消息队列形式发送给任意进程.对消息队列具有操作权限的进程都可以使⽤msget完成对消息队列的操作控制.通过使⽤消息类型,进程可以按任何顺序读信息,或为消息安排优先级顺序.
优点:可以实现任意进程间的通信,并通过系统调⽤函数来实现消息发送和接收之间的同步,⽆需考虑同步问题,⽅便;缺点:信息的复制需要额外消耗CPU的时间,不适宜于信息量⼤或操作频繁的场合
5)共享内存
共享内存就是映射⼀段能被其他进程所访问的内存,这段共享内存由⼀个进程创建,但多个进程都可以访问.共享内存是最快的IPC(进程间通信)⽅式,它是针对其它进程间通信⽅式运⾏效率低⽽专门设计的.它往往与其他通信机制,如信号量,配合使⽤,来实现进程间的同步与通信.
优点:⽆须复制,快捷,信息量⼤;缺点:1)通信是通过将共⽆法实现享空间缓冲区直接附加到进程的虚拟地址空间中来实现的,因此进程间的读写操作的同步问题;2)利⽤内存缓冲区直接交换信息,内存的实体存在于计算机中,只能同⼀个计算机系统中的诸多进程共享,不⽅便⽹络通信
6)套接字:可⽤于不同及其间的进程通信
优点:1)传输数据为字节级,传输数据可⾃定义,数据量⼩效率⾼;2)传输数据时间短,性能⾼;3) 适合于客户端和服务器端之间信息实时交互;4) 可以加密,数据安全性强
缺点:1) 需对传输的数据进⾏解析,转化成应⽤级的数据

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。