进程间通信(1):简介
进程间通信
单机操作系统上的进程可以分为两类:
1.独立进程:这类进程不会和其它进程有任何交流。
2.协作进程:两个或多个进程之间需要交流。
例如,ls /tmp
命令是独立运行的,不依赖于其它进程,而cat a.log | grep 'abc'
命令中的两个进程是协作进程,grep进程依赖于cat进程,grep只有等待到了cat进程产生的数据才能继续执行下去。
对于单机上不同进程之间的协作,各进程之间需要进行数据的交流,这种行为称为进程间通信(Inter-process communication,IPC),即进程与进程的通信。
除了单机上的多个进程可能需要进程间通信,多计算机之间的进程有时候也需要进行进程间的通信,这很常见,例如本机上的QQ客户端进程需要和腾讯的QQ服务器上的进程进行数据传输,浏览器浏览网页时,浏览器进程需要和网页所在的服务端进程进行数据传输,等等。
进程间通信的方式有很多种。从广义上讲,只要进程间能共享数据或传递数据就算是进程间通信。下面列出常见的进程间通信方式:
进程间通信方式 | 描述 |
---|---|
文件(File) | 多个进程可以获取到同一个文件的数据 |
管道(pipe) | 单方向传输数据的管道,只能一方写,另一方读 |
套接字(Socket) | 多机进程间通信,当然也可以在本机让两个进程使用socket通信 |
Unix域套接字(Unix Domain Socket) | 单机进程间通过域套接字模式通信,可看作是双向管道 |
共享内存(Shared Memory,shm) | 在物理内存上划分一片内存,多个进程共享这片内存 |
文件映射(Memory-maped file) | 将文件中的一段数据映射到物理内存,多个进程共享这片内存 |
消息队列(Message Queue) | 某进程将消息放入消息队列,其它进程从队列中接收消息 |
信号(Signal) | 通过发送某些信号通知其它进程,进程收到信号做出不同的处理 |
信号量(Semaphore) | 就是信号灯。应用方式有多种,其作用概括起来就是,根据是否有信号灯或信号灯的数量多少来决定是否阻塞进程 |
锁(Lock) | 对资源上锁,如果资源已被某进程锁住,则其它进程想要修改甚至读取这些资源,都将被阻塞,直到锁被打开。 |
通过文件实现进程间通信的方式,这没什么可介绍的,简单介绍剩下的几种进程间通信方式。