1、管道和命名管道
管道的实质是一个内存缓冲区,管道的一端进程以顺序的方式把数据写入缓存,另一端则顺序地读出数据。
管道
- 半双工,数据只能单向流动;
- 管道是匿名的;
- 只能用于有亲缘关系的进程之间;
- 缓存是有限制的;
- 数据先进先出;
- 传送的数据是无格式的,这要求进程间要事先约定好数据格式。
命名管道
命名管道克服了管道只能用于亲缘进程之间的缺点。只要可以访问该路径,就能通过命名管道进行通信。
2、信号
用于通知接收进程有某种事件发生。
- 信号由某进程产生,并设置信号传递的对象,然后传递给操作系统;
- 操作系统根据该对象的状态(是否阻塞),选择性地发送给接收者。如果接收者阻塞该信号,操作系统暂时保留该信号;如果接收者没有阻塞,操作系统传递该信号;
- 目的进程接收到该信号之后,根据对此信号设置的预处理方式,暂时终止当前代码的执行、保留上下文、执行中断程序、执行完成之后再回到中断的位置。
3、消息队列
- 是一个链表,具有特定的格式,存放在内存中;
- 允许一个或多个进程写入消息;
- 消息可以实现随机查询。
4、共享内存
多个进程可以访问同一块内存空间。
5、信号量
信号量是一个计数器,用于多进程对共享数据的访问,信号量的意图在进程间同步。
- 创建一个信号量:调用者指定初始值,对于二值信号量而言,可以是1或0;
- 等待一个信号量:测试信号量的值,如果小于0就阻塞(P 操作)。
- 挂出一个信号量:将操作了的值加1(V 操作)。
6、套接字
套接字是一种通信机制,凭借这种方式,客户/服务器端既可以在本地进行,也可以跨网络进行。
套接字由3个属性确定:域、端口号、协议类型。