- 我最近开了几个专栏,诚信互三!
====> |||《算法专栏》::刷题教程来自网站《代码随想录》。|||
====> |||《C++专栏》::记录我学习C++的经历,看完你一定会有收获。|||
====> |||《Linux专栏》::记录我学习Linux的经历,看完你一定会有收获。|||
====> |||《C#专栏》::记录我复习C#的经历,深度理解,查漏补缺,不定期更新。|||
====> |||《计算机网络专栏》::记录我学习计算机网络,看完你一定会有收获。|||
进程间通信(1)管道
- 什么是进程间通信
- 进程间通信的基础
- 管道通信原理
- 管道的特点
什么是进程间通信
进程间通信是让进程可以看到另一个进程发送的资源。
进程间通信的基础
不论是何种进程间的通信,都需要有一定的基础。
1).都需要让多个通信的进程看到同一份资源。
2).同时该份资源不能由通信的进程的任何一方提供。
否则进程是否能成功通信就取决于某个通信的进程了,耦合度太高。
所以操作系统需要提供和管理这部分资源。
管道通信原理
管道是进程间通信的方法之一,管道分为命名管道和匿名管道,管道通过一个临时文件的缓冲区作为公共资源进行通信。
Linux中管道操作符就是通过管道通信原理实现的。
1).通过pipe接口创建一个匿名管道,会打开读端和写端
其中pipefd[0]是读端的fd,pipefd[1]是写端的fd。
2).创建子进程,子进程会继承父进程pcb的内容,并且也会生成一个新的file结构体数组,与父进程的pcb相同。
3).一个进程关闭读,一个进程关闭写,进行半双工通信。
命名管道通过接口mkfifo创建管道文件,两个进程通过管道文件进行通信,也可以使用mkpipe指令创建一个管道文件。
命名管道比匿名管道的优势是匿名管道只能进行有血缘关系的进程,而命名管道可以让任何进程之间进行通信。
管道的特点
管道有优点和缺点。
一.优点
1).管道是自同步的。
1.管道的读端不读,不关闭读端,写端一直写,会导致将管道写满后,就会阻塞等待读端读取数据。
2.管道的写端不写,不关闭写端,读端在读完管道的数据后,就会阻塞等待写端写数据。
3.管道的读端不读,关闭读端,写端在写,则os会判定该管道的软件条件不满足了,于是会向写端进程发送信号,杀死进程。
4.管道的写端不写,关闭写端,读端在读,则读函数则会返回0。
2).管道是面向字节流的。
管道内不论有多少数据,都会被直接读取完。
3).管道是半双工通信的。
二.缺点
1).管道的效率很低,需要调用系统调用,时间效率低。
2).匿名管道只能进行血缘关系的通信,命名管道可以进行任何进程间的通信。