Skip to main content

25 进程间通信

管道模型

管道会将前一个命令的输出,作为后一个命令的输入。管道是一种单向传输数据的机制,是一段缓存,里面的数据只能从一端写入,从另一端读出。如果想互相通信需要创建两个管道。

匿名管道 |

命名管道 mkfifo hello

# echo "hello world" > hello
# cat < hello 
hello world

消息队列模型

消息队列,key是消息队列的唯一标识。

共享内存模型

每个进程都有自己独立的虚拟内存空间,不同的进程的虚拟内存空间映射到不同的物理内存中去。

拿一块虚拟地址空间,映射到相同的物理内存中。进程写入的东西,另外一个进程马上就能看到。

信号量

需要一种保护机制,使得同一个共享的资源,同时只能被一个进程访问。信号量是一个计数器,主要用于实现进程间的互斥与同步。原子操作(Atomic Operation),就是数据只能通过 P 操作,不能同时响应两个操作。