Linux 进程间通信(IPC)(pipe,Signal,Semaphore,Shared Memory,Message Queue,Socket)



Linux 进程间通信 方式包括 管道匿名管道命名管道)、信号消息队列共享内存信号量套接字 等方式。

序号描述
1管道匿名管道(pipe)和命名管道(named pipe)
2信号(Signal)
3消息队列(Message Queue)
4共享内存(Shared Memory)
5信号量(Semaphore)
6套接字(Socket)

1、管道(pipe,named pipe)

管道一个进程连接数据流另一个进程通道,它通常被用来把一个进程的输出端连接到另一个进程的输入端

Linux命令中通常用符号|来表示管道。例如:

ps -ef | grep init

此命令中psprocess status)是一个独立的进程grep也是一个独立的进程,中间的管道ps原本要输出到屏幕数据输出到grep中,作为grep这个进程的输入

管道分为匿名管道命名管道两种:

序号管道描述
1匿名管道(pipe)主要用于两个有父子关系进程间通信
2命名管道(named pipe)主要用于没有父子关系进程间通信
管道:通常用于具有亲缘关系的父子进程或者兄弟进程间通信,是半双工的,数据只能往一个方向流动,先入先出,与自来水管很相似。如果需要双方互通,必须建立两个管道。
命名管道:突破了进程间的亲缘关系限制,即非父子、兄弟进程之间也可相互通信。

2、信号(Signal)

信号是在软件层次上 对中断机制的一种模拟,它是比较复杂的通信方式,用于通知接受进程有某事件发生。
一个进程收到一个信号 与 处理器收到一个中断请求,效果上可以说是一样的。


3、消息队列(Message Queue)

消息队列 是消息的链接表,包括 Posix 消息队列 和 System V 消息队列。

它克服了 前两种通信方式中 信息量有限 的缺点,具有 写权限的进程 可以向消息队列中 按照一定的规则添加新消息;对消息队列 有读权限 的进程可以从 消息队列中 读取消息。


4、共享内存(Shared Memory)

共享内存 是允许 两个不相关进程 访问 同一个逻辑内存进程间通信方法,是在两个正在运行的 进程 之间 共享和传递数据 的一种非常有效的方式。

共享内存 可以说这是 最有用的 进程间通信方式。它使得 多个进程 可以访问 同一个内存空间,不同进程 可以及时看到 对方进程 中对 共享内存 中 数据的更新。
这种通信方式需要 依靠某种 同步机制,如 互斥锁信号量 等。

两个进程使用 共享内存通信机制 如图所示:
在这里插入图片描述

5、信号量(Semaphore)

多进程 编程 中需要关注 进程间同步(Sync) 及 互斥(Mutex) 问题。

同步 是指多个进程 为了完成同一个任务 相互 协作运行,而 互斥 是指不同的进程 为了争夺有限的系统资源(硬件或软件资源)而相互 竞争运行

信号量 是用来解决 进程间 同步与互斥 问题的一种 进程间通信机制
信号量 是一个特殊的变量,变量的值代表着 关联资源的可用数量。若等于 0 则意味着目前 没有可用的资源

根据 信号量的值 可以将 信号量 分为 二值信号量计数信号量

序号信号量描述
1二值信号量信号量只有01两种值。
若资源被锁住,信号量值为0,若资源可用则信号量值为1
2计数信号量信号量可在0到一个大于1的数(最大 32767)之间取值。该计数 表示可用资源的个数

信号量 只能进行两个 原子操作P操作V操作
原子操作 就是指 不能再进一步分割 的操作)

P原子操作V原子操作 的具体定义如下:

序号操作描述
1P操作(Proberen)(1)如果有可用的资源信号量值>0),则占用一个资源将信号量值减1)。
(2)如果没有可用的资源信号量值=0),则进程阻塞(block) 直到系统将资源分配给该进程
(进入信号量等待队列,等到资源后再唤醒该进程)。
2V操作(Verhogen)如果在该信号量等待队列中有进程等待资源,则唤醒一个阻塞进程
如果没有进程等待它,则释放一个资源给信号量值加1)。


6、套接字(Socket)

套接字 是一种 更为一般的 进程间通信机制,它可用于不同机器之间的进程间通信,应用非常广泛。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值