进程间通信(管道、共享内存、消息队列、信号量)
进程间通信 Linux环境下,进程地址空间相互独立,每个进程各自有不同的用户地址空间。任何一个进程的全局变量在另一个进程中都看不到,所以进程和进程之间不能相互访问,要交换数据必须通过内核,在内核中开辟一块缓冲区,进程1把数据从用户空间考到内核缓存区,进程2再内核缓存区把数据读走,内核提供这种机制称为进程间通信。通信方式有:管道、共享内存、消息对列、信号量等 管道 什么是管道呢? 我们把从一个进程连接到另一个进程的一个数据流称为一个“管道”, 管道的本质是内核中的一块缓冲区。 管道的特性 ① 半双工通信 :半双工通信(Half-duplex Communication)可以实现双向的通信,但不能在两个方向上同时进行,必须轮流交替地进行。在这种工作方式下,发送端可以转变为接收端;相应地,接收端也可以转变为发送端。但是在同一个时刻,信息只能在一个方向上传输。因此,也可以将半双工通信理解为一种切换方向的单工通信。 ②: 管道的生命周期随进程 ,进程关闭,对应的管道端口关闭,两个进程都关闭,则管道关闭。 ③: 管道自带同步与互斥 :管道为空时读取,read 阻塞;管道满时写入,write 阻塞。 ④: 管道提供字节流传输服务 管道的分类 ①:匿名管道 ②:命名管道 匿名管道 什么是匿名管道? 匿名管道之所以可以通信的本质在于,父进程frok子进程,父子进程各自拥有一个文件描述符表