45.1 简单总结 Linux IPC 机制
2025/3/8 个人理解:
- socket:UNIX 域套接字还是网络套接字,这取决于通信进程是否属于同一个主机。
- 管道:包括匿名管道(
pipe
系统调用)和命名管道(fifo 文件)。 - System V IPC 三大件(POSIX 中也能找到这几个组件的替代物)
- 信号量
- 共享内存
- 消息队列
- System V IPC 用 key 来访问,本质是命名的,
IPC_PRIVATE
只是生成独一无二的名字而已;除了消息队列必须命名之外,POSIX 中其他两个既可以命名也可以匿名。 - 其他区别见 51 POSIX IPC 介绍。
- mmap:单独用 mmap 可以实现匿名共享内存,但不能解决命名共享内存的问题。POSIX 共享内存可以解决命名共享内存的问题,但是要配合 mmap 才能附加到进程地址空间。mmap 因为很特殊所以单独放出来,没合并到共享内存里面去。
- 文件锁
- futex
- 信号:信息传输效率低,一般用于操作系统给进程通知信息,或者用户交互式干预进程运行。