我们在做进程间通信开发时,要了解管道,FIFO,消息队列,信号量,共享内存等类型的对象在系统中存在多少时间,这个就是IPC对象的持续性(persistence)。
一般有三种持续性,按由低到高依次为随进程持续的IPC(进程维护),随内核持续的IPC(内核维护),随文件系统持续的IPC(文件系统维护)。
1.随进程持续的(process-persistent)IPC对象(进程维护)会一直存在到打开着该对象的最后一个进程关闭该对象为止,如管道和FIFO。
2.随内核持续的(kernel-persistent)IPC(内核维护)会一直存在到系统重启内核自举或显示删除该对象为止,如System V消息队列,信号量,共享内存;Posix消息队列,信号量,共享内存至少是随内核持续的,也可以随文件系统持续。
3.随文件系统持续的(filesystem-persistent)IPC(文件系统维护)即使系统重启内核自举也会一直存在,必须显示的删除该对象,如Posix消息队列,信号量,共享内存采用文件映射即是随文件系统持续的。
总结如下:
IPC | 持续性 |
管道 FIFO | 随进程 随进程 |
Posix互斥锁 Posix条件变量 Posix读写锁 fcntl 记录上锁 | 随进程 随进程 随进程 随进程 |
Posix消息队列 Posix有名信号量 Posix无名信号量(基于内存) Posix共享内存区 | 随内核 随内核 随进程 随内核 |
System V消息队列 System V信号量 System V共享内存区 | 随内核 随内核 随内核 |
TCP套接字 UDP套接字 Unix域套接字 | 随进程 随进程 随进程 |
注:上述表格没有Posix IPC的随文件系统持续,是因为这种方式一般很少使用,意义不大。