管道

进程间通讯就像现实中的管道一样,有一个进程进行写操作,其余的进程进行读操作。如果管道为空则read操作会阻塞,如果管道为满则write操作会阻塞。因此这里我们就引入了管道(pipe)

管道的特点:通讯数据遵循先进先出的原则,并且都是半双工通信原则,写入管道数据在内存存放。

分类:管道分为两种,有名管道和无名管道。

1、有名管道和无名管道的区别

有名管道:可以在任意进程之间进行通讯,通讯是双向的,任意一段都可读可写,但同一时间只能一端读一端写。有名管道是建立在实际的磁盘介质或文件系统(而不是只存在于内存中)上有自己名字的文件,任何进程可以在任何时间通过文件名或路径名与该文件建立联系。为了实现有名管道,引入了一种新的文件类型——FIFO文件(遵循先进先出的原则)。
实现一个有名管道实际上就是实现一个FIFO文件。有名管道一旦建立,之后它的读、写以及关闭操作都与普通管道完全相同。虽然FIFO文件的inode节点在磁盘上,但是仅是一个节点而已,文件的数据还是存在于内存缓冲页面中,和普通管道相同。

无名管道:只能在具有亲属关系的进程(父子进程)间通讯,不能再网络间通讯,并且是单向的,只能一端读另一端写。

2、管道的内核实现方式

管道是由内核管理的一个缓冲区

管道的一端连接一个进程的输出,这个进程会向管道中放入信息

管道的另一端连接一个进程的输入,这个进程取出被放入管道中的信息

一个缓冲区不需要很大,一般为4K大小,它被设计成为唤醒的数据结构,以便管道可以被循环利用

管道中没有信息的话,从管道中读取的进程会等待,直到另一端的进程放入信息

当管道被放满信息的时候,尝试放入信息的进程会等待,直到另一端的进程取出信息

当两个进程都终结的时候,管道就会自动消失

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值