进程间通信

背景:

之前的程序是直接操作物理内存的,但这样会有几个问题

  1. 物理内存有限,如果内存不够用了,操作系统会把程序暂时写入到硬盘中,硬盘和内存来回读写,效率不高
  2. 进程A可能会恶意修改进程B内存上的数据

后来有了虚拟地址,操作系统将程序的虚拟地址与物理内存进行映射,这样每个进程之间互相不干扰

但是这样就无法进行进程间的通信了,这要有操作系统来实现,操作系统提供一个缓冲区,进程A,B通过操作这个缓冲区实现通信

linux中进程管理的方式

  1. 管道 [匿名管道,命名管道FIFO] unix IPC posix mkfifo(单个机器上具有血缘关系的进程间通信使用)
  2. 中断信号[只用于进程间事件通知]
  3. system v IPC 标准提供的进程间通信 [消息队列,信号量,共享内存] (posix IPC 同样实现,PHP只实现了system V的)
  4. socket stream通信,可以实现跨机器间进程通信