一、进程间通信的理解
什么是进程间通信?
进程间通信就是进程之间互相传递信息(数据)。
为什么进程之间要通信?
在平时写代码的时候,为了减少代码的复杂性,我们通常会把常使用的某些代码封装成一个个函数。使用函数的话,函数之间也会通过返回值来传递某些数据。
那么在大型的项目中,一个项目通常会分割成多个程序,多个程序运行后,将会产生多个进程。函数之间都需要传递数据,进程之间自然也需要传递数据,通过传递的数据使得项目正常运行,但是进程之间是无法直接传递数据的。多个进程之间可能还需要访问同样的资源。并且进程之间可能还需要互相通知,通知某个进程发生了某些事件。
总结一下,进程间通信的目的主要有以下几个方面:
- 数据传输:一个进程需要把数据发送给另一个进程。
- 资源共享:多个进程需要共享同样的资源。
- 通知事件:一个进程向另一个或一组进程发送消息,通知它们发生了某种事件。
- 进程控制:有些进程需要控制其他进程。
为什么进程之间无法直接传递数据?
这里就要回忆一下虚拟内存了,每个进程都有自己独有的虚拟内存。进程A如果要传递变量M的地址给进程B,假如直接把M的地址给进程B,进程B拿到的其实是虚拟地址,但是用这个地址在进程B自己的虚拟空间中找数据是找不到的。
二、常见的进程间通信方式
因为进程间无法直接传递数据,因此操作系统提供了一些进程间通信方式,使得进程间可以传递数据。
常用的进程间通信方式有:管道、共享内存、消息队列、信号、信号量。不同的通信方式有不同的特点,用来应对不同的场景。
而这些进程间通信方式的本质是一块公共的访问空间,相互之间需要通信的进程可以通过访问这块公共空间来传递或者接收数据。