25 进程间通信
管道模型
管道会将前一个命令的输出,作为后一个命令的输入。管道是一种单向传输数据的机制,是一段缓存,里面的数据只能从一端写入,从另一端读出。如果想互相通信需要创建两个管道。
匿名管道 |
命名管道 mkfifo hello
# echo "hello world" > hello
# cat < hello
hello world
消息队列模型
消息队列,key是消息队列的唯一标识。
共享内存模型
每个进程都有自己独立的虚拟内存空间,不同的进程的虚拟内存空间映射到不同的物理内存中去。
拿一块虚拟地址空间,映射到相同的物理内存中。进程写入的东西,另外一个进程马上就能看到。
信号量
需要一种保护机制,使得同一个共享的资源,同时只能被一个进程访问。信号量是一个计数器,主要用于实现进程间的互斥与同步。原子操作(Atomic Operation),就是数据只能通过 P 操作,不能同时响应两个操作。