进程间通信方式
- 无名管道(
pipe
):用于具有父子关系的进程之间的通信 - 有名管道(
fifo
):可用于非父子关系之间的进程 - 信号量(
semaphore
):是一个计数器,可用于进程或线程的同步或互斥,常用作锁机制 - 消息队列(
message
):是消息的链表,允许进程将格式化的数据流以消息队列形式发送给任意进程 - 共享内存(
shared memory
):映射一段能够被其他进程所访问的内存,由一个进程创建,多个进程访问,是最快的IPC
方式,不需要进行频繁的用户态内核态切换。但需要与其他机制,如信号量配合来实现进程间的同步
区别
管道,消息队列需要在内核和用户空间进行四次内存拷贝,共享内存只需要拷贝两次。一次是输入文件到共享内存区,另一次是从共此昂内存区到输出文件。
共享内存实现机制
POSIX
共享内存XSI
共享内存mmap
共享内存
不同进程共享内存:同一块物理内存被映射到多个进程的进程地址空间。当前进程可以看到其他进程对于 shared memory
数据的更新。但由于不同进程访问同一块空间,需要进行同步或互斥,一般使用互斥锁或信号量。