进程间通信方式
在计算机中,每个进程都有自己独立的内存地址空间,其他进程并不能直接访问属于某个进程的地址空间,是为了确保系统数据的安全性。
但举个例子,我们使用图片时,点击分享按钮,可以通过微信将其分享出去,因此此时就需要实现进程之间的相互通信。
进程之间的相互通信方式分为三种:
- 共享存储
- 管道通信
- 消息传递
1. 共享存储
一个进程是不能去访问另一个进程的私有空间的,因此操作系统会为这两个进程提供一块共享内存空间。但是在使用这块共享空间时,是进程互斥的,即当一个进程访问完了出来以后,另一个进程才能访问,修改。
共享存储又有两种方式,一种是基于数据结构的共享,比如在共享空间里只能存放一个长度为10的数组,这种共享方式速度慢,限制多,是一种低级通信的方式。另一种是基于存储区的共享,在内存中划出一块共享存储区,数据的形式、存放的位置都由进程控制,而不是操作系统,这种共享方式速度更快,是一种高级通信的方式。
2.管道通信
“管道”是指用于连接读写进程的一个共享文件,其实就是在内存中开辟一个大小固定的缓冲区,比如Linux系统中的管道大概为4KB。
数据通过管道来进行传输,但需要注意管道通信是一种半双工的通信方式,即在同一个时间只能进行单向的数据传输。如果需要同时进行双向传输的话,就需要建立两条管道。管道没有被写完时,读进程是被阻塞