IPC(InterProcess Communcation)五种方式
一、管道
无名管道
单向通道,只能把第一条命令输出作为第二条命令输入
命名管道
单向通道,首先创建命名管道,然后用a进程写数据,b进程读数据;
但管道内容未被读出,那么命令会一直停在这里,只有当另一个把管道内的内容读出来之后命令才能结束。
管道缺点:通信效率低下,a进程给b进程传输数据,只有b进程读取数据之后a进程才能返回,所以不适合频繁通信,为了解决这个问题,引入消息队列
二、消息队列
管道一定要b通信读取之后a才能返回,用消息队列的通信模式可以解决
a通信给b进程发送消息,把消息放在队列中,b进程根据需要去对应,反之也可以,类似缓存
消息队列缺点:数据占内存较大,通信频繁,发送消息(拷贝)过程会花很多时间,解决问题使用共享内存
三、共享内存
a传到b,加入文件较大,拷贝过程会花很长时间,共享内存可以解决拷贝时间
系统加载一个进程,分配给内存的是虚拟内存,两个进程各自拿出一块虚拟地址,然后映射到同一个实际物理内存中,可以实现共享机制。
共享机制缺点:存在多进程竞争的问题,比如线程安全,使用以下信号量
四、信号量
信号量本质就是一个计数器,用来处理进程之间互斥与同步。
例如:信号量初始值为1,a进程访问内存1时把信号量置为0,b进程访问内存1时信号量为0,则无法访问内存1。
五、Socket
以上四种方式都是多进程于一台主机,超远距离进程间通信需要Socket。
例如:浏览器发起http请求,然后服务器会返回对应的数据,这种就是Socket通信。
原文:https://www.cnblogs.com/Atractylodes/p/12036213.html