文章目录
- 🌈 一、进程间通信的目的
- 🌈 二、进程间通信的理解
- 🌈 三、进程间通信的分类
🌈 一、进程间通信的目的
- 数据传输:一个进程需要将它的数据发送给另一个进程
- 资源共享:多个进程之间共享同样的资源。
- 通知事件:一个进程需要向另一个或一组进程发送消息,通知它或它们发生了某种事件 (如进程终止时要通知父进程)。
- 进程控制:有些进程希望完全控制另一个进程的执行 (如 Debug 进程),此时控制进程希望能够拦截另一个进程的所有陷入和异常,并能够及时知道它的状态改变。
- 总而言之,进程间通信的目的是为了达成多进程之间的协同。根据不同的控制场景,需要不同的协同方式,而所有的协同方式的前提是进程之间要能够建立通信。
🌈 二、进程间通信的理解
1. 进程之间不能直接进行通信
- 由于进程具有独立性,A 进程的数据不能直接交给 B 进程。
- 如果 A 进程想要直接数据交给 B 进程,是 A 进程去访问 B 进程的一段内存区域将数据拷进去呢?还是 B 进程去直接读取 A 进程的内存区域将数据拷出来呢?
- 因此进程之间如果想要直接进行通信是行不通的,这直接违背了进程具有独立性的特点。
2. 如何实现进程间通信
- 由于进程 A 和进程 B 不能直接进行通信,那么就需要借助媒介来进行交流。
- 如:相隔两地的人不能直接交流,此时就可以通过书信实现两个人之间的通信,书信就是媒介。人 A 将想要发送的数据写在书信上,人 B 就从书信上读取数据。
- 进程之间的通信也是同理,多个进程通过往媒介读写数据实现进程间的通信。
3. 进程间通信的本质
- 不管如何实现进程间通信,本质就是让不同的进程看到同一份资源 (即同一个媒介)。
- 这个资源通常是由 OS 提供的,不能由 A / B 进程的任何一个提供, 但 A / B 进程可以去向 OS 申请。
🌈 三、进程间通信的分类
- 管道:匿名管道、命名管道。
- System V IPC:System V 消息队列、System V 共享内存、System V 信号量。
- POSIX IPC:消息队列、共享内存、信号量、互斥量、条件变量、读写锁。