【面试练习题】进程间通信方式的区别

【1】管道

  • 亲缘关系(父子、兄弟)

  • 单向通信,如果需要双工通信,则需要建立两个管道

  • 管道缓冲区大小受限制(由操作系统内核设定)

  • 管道传输的是无格式的字节流,需要输入输出双方事先约定好数据的格式

  • 是一个只存在在内存中的文件

 

【2】有名管道(又叫FIFO)

  • 有名 + 非亲缘

  • 可以一个服务器接收多个客户端的管道。比如客户先把自己的进程号告诉服务器,然后管道用自己的进程号命名。

 

【3】消息队列

  • 相比于FIFO,消息对垒可以独立于发送和接收进程存在,消除了命名管道打开和关闭的时候可能带来的困难(比如一方要发送消息了,但是管道由另一方建立还没有建立?)。

  • 双工的,可以同时收发消息

  • 可以通过消息类型有选择地接受数据,而不是默认接收

  • 但在逐渐被淘汰,可以用流管道或者套接字来取代它。

 

【4】共享内存

  • 优点:操作方便,接口简单,数据不用传送、效率高。

  • 缺点:没有实现同步机制,需要借助其他的手段(比如信号量)进行同步

PS:共享内存的同步除了使用POSIX或者SYSTEM V 信号量,还可以使用信号(signal)。

 

【5】信号量

  • 辅助进程间同步(一般进程间是system V信号量,线程间是POXIS信号量)(比如PV操作时)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值