文章目录
- 进程通信__
- 知识总览图
- 什么是进程通信?
- 进程通信--通过共享存储实现进程通信
- 进程通信--通过管道通信实现进程通信
- 进程通信--通过消息传递实现进程通信
进程通信__
知识总览图
什么是进程通信?
顾名思义,进程通信就是指进程之间的信息交换。
为了保证安全性,一个进程是不能够直接访问另一个进程的地址空间的,如下图:
但是进程之间的信息交换又是必须要实现的,你比如说你想要把手机图库里面的照片微信分享给小伙伴,这个时候图库相关进程和微信相关进程之间就必须要信息交换。所以下面有几种可以进行进程通信的方式。
进程通信–通过共享存储实现进程通信
共享存储一共有两种方式,一种是基于数据结构的共享,另外一种是基于存储区的共享。
进程通信–通过管道通信实现进程通信
“管道”是指用于连接读写进程的一个共享文件,又名pipe文件。其实就是在内存中开辟一个大小固定的缓冲区。
1.管道只能采用半双工通信,某一时间段内只能实现单向的传输。如果要实现双向同时通信,则需要设置两个管道。
2.各进程要互斥地访问管道。
3.数据以字符流的形式写入管道,当管道写满时,写进程的write()系统调用将被阻塞,等待读进程将数据取走。当读进程将数据全部取走后,管道变空,此时读进程的read()系统调用将被阻塞。
4.如果没写满,就不允许读。如果没读空,就不允许写。
5.数据一旦被读出,就从管道中被抛弃,这就意味着读进程最多只能有一个,否则可能会有读错数据的情况。
进程通信–通过消息传递实现进程通信
消息传递一共有两种通信方式,第一种是直接通信方式,第二种是间接通信方式。
首先要知道一个消息是由消息头和消息体组成的,消息头里包括:发送进程ID、接收进程ID、消息类型、消息长度等格式化的信息(计算机网络中发送的“报文”其实就是一种格式化的消息)。
直接通信方式,如下:
发送进程把它想要发送的消息,通过发送原语发送给接收进程,然后这些消息会被放到接收进程的消息队列里面,接着接收进程通过接收原语一个个读取消息队列中的消息,这样发送进程和接收进程就实现了线程通信。
间接通信方式,如下:
对于间接通信方式,进程1会先通过发送原语把消息放到一个信箱中,然后进程2会通过接收原语从信箱中读取这些消息。