我们在做进程间通信开发时,要了解管道,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的随文件系统持续,是因为这种方式一般很少使用,意义不大。