第06课:探究进程间通信技术,优化数据传输效率

在前面的课程中,我们讲过不同进程运行在各自的虚拟地址空间内,相互之间被操作系统隔离开。就像在《黑客帝国》中,每个人都生活在一个封闭的充满营养液的容器里,人与人之间利用接在后脑勺的数据线通过 Matrix 互相交流一样,在 Linux 中进程间的相互通信需经过内核中转。

内核中转的不同实现方式,催生出了进程间不同的通信技术。在本文中,我们就来探究进程间通信的不同方式及底层实现原理,主要包括以下几方面内容:

  • 管道与 FIFO
  • 消息队列
  • 信号量
  • 共享内存

6.1 管道与 FIFO

6.1.1 管道

前面曾讲到,在 fork() 成功创建子进程之后,已经打开的文件描述符在父子进程间是共享的,管道就是利用这一特性来工作的。

创建管道的系统调用如下所示:

int pipe(int fds[2]);

它会打开两个文件描述符分别用于读取(fds[0])和写入(fds[1])。这两个文件描述符构成了管道的两端,从一端写入数据,从另一端读出数据。所有数据采用比特流形式,读取顺序与写入顺序完全一致,且数据流向为单向。这也正是把它称为管道的原因,像极了真实世界中的管子,只是其中流动的不是流体,而是二进制的数据比特。创建完成后的管道如下图所示:

评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符 “速评一下”
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付 49.90元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值