IPC进程通信、消息队列

IPC进程通信、消息队列

计算机进程通信原理、IPC、消息队列,

常见的方法

  • 共享内存模式
  • 消息传递模式
  • 共享文件模式

主要使用的是前两种方法

多处理器之间通信

处理器之间不能通过消息传递模式通信,只能共享内存
处理器本身是异步执行的,消息队列没办法实现(接受消息和消耗消息有可能会冲突)
而共享内存的方法也有可能会导致冲突,可以为不同处理器划分不同地址空间来避免冲突

01

单处理器进程通信

进程之间的通信最常见最安全的方法就是消息队列。
每个进程会维护一个消息队列(常见的是FIFO队列,也有带优先级的队列本文不做讨论)

02

进程A给进程B发消息,首先获取进程B消息队列(链表)的地址,将消息插入到链表后面。
当进程B执行是会去取消息队列最前面的消息然后执行。
由于进程A进程B是在同一处理器上占不同的时间片(跟操作系统进程的调度算法有关),
同一时刻消息队列不可能即recive 又 consume,所以不存在队列读写冲突的问题。

消息可以是简单的数据编码标志,也可以携带数据(数据起始地址以及长度),或者其他数据结构体格式

03

scala 的Actor的消息传递也是用此方式实现。

评论