系列文章目录
进程间通信(零)——说明
进程间通信(一)——管道
进程间通信(二)——信号
进程间通信(三)——共享内存
进程间通信(四)——信号量
前言
编程语言中,进程都是存在自己的用户空间的,而内核空间都所有进程共享的区域,因此内核就是进程间实现通信的“通道”。
一、进程间通信的概念?
进程间通信,简称IPC,全程inter process communication。规定了包括管道、信号、共享内存、信号量、消息队列和网络通信等方式。
二、基本说明
1.管道
管道实现最简单,但是效率比较差,主要用于低数据量的情况。
管道就是申请内核一块缓存,进程创建管道后,Linux会给一个write和read段的描述符,直接操作既可
管道根据进程的“亲疏”,可以细分为无名管道和有名管道。
Note:
1、管道采取半双工通信,1条管道当前只能支持一个进程写操作,另一个进程读操作
2、读进程会一直阻塞,知道写进程的数据写完,反之亦然。
2.信号
Linux用于响应各类事件的信号,我们在Linux系统输入kill -l命令可以查看到。
常用的操作
1、代码捕捉ctrl+c(产生SIGINT信号),然后退出程序
2、app运行时,通过ps查看进程号,然后通过kill -9 PID可以直接杀死进程
3.共享内存
共享内存的进展,在内核开辟一块空间(物理内存),将其映射到不同的用户进程(虚拟内存)中(通过返回的地址操作)。
这样做的好处是,可以解决消息队列在内核态和用户态数据拷贝时的问题。
4.信号量
共享内存操作时,可能存在数据拷贝不同步的问题,信号量就是解决进程同步存在的。
5.消息队列
消息队列解决了管道中进程间数据交互的对接问题。写进程写好数据后就可以直接返回,只要读进程去读取就可以了。
消息队列要求读写双方遵循一个约定好的消息体格式
6.网络通信
前面5中进程通信都是基于同一台主机的,限制性较大。而网络通信推动了人类可以跨越现实距离,通过网络和其他主机进行通信。
三、总结
此篇作为开章,主要说明了关于进程间通信的基础概念。后续会根据知识点展开讲解这些内容。