在 Linux 系统编程的广阔天地中,进程间通信(IPC)是连接独立进程的纽带,也是构建复杂并发系统的基石。本章《进程间通信(本机 IPC)》将带你深入理解为何多个进程需要“对话”,以及如何利用 Linux 提供的丰富机制实现高效、安全的数据交换与同步协作。

课程伊始,我们将探讨进程空间的独立性。每一个进程都拥有独立的虚拟地址空间,这虽然保障了系统的安全与稳定,但也切断了进程间直接共享内存的可能。因此,当业务需求要求不同进程交换数据或协调行动时,我们就必须依赖特定的 IPC 机制。Linux 为此提供了多种选择:管道、消息队列、共享内存和信号量,它们各自适用于不同的场景。

首先讲解的是管道,这是 Unix 系统最古老的 IPC 机制。无名管道具有单向通信的特性,且仅适用于具有亲缘关系的进程(如父子进程),常用于标准输入输出的重定向场景。而双向通信则需要建立两个无名管道来实现,虽然功能完整但结构稍显复杂。有名管道则突破了亲缘关系的限制,允许无亲缘关系的进程通过文件系统路径进行通信,其实质是一个特殊的设备文件,同样支持单向及双向通信,为本地网络外的进程交互提供了便利。

随后,课程将焦点转向 System V IPC 系列,包括消息队列、共享内存和信号量。消息队列克服了管道通信中“数据一旦读出即消失”的限制,提供了异步的、具有消息边界的数据传递方式,适合处理结构化的小批量数据。共享内存则是速度最快的 IPC 机制,它允许多个进程映射同一块物理内存区域,虽然通信效率极高,但缺乏同步机制,极易引发竞争条件,因此必须配合信号量使用。

信号量作为关键的同步工具,贯穿于整个 IPC 章节。我们将深入剖析信号量的原理,学习如何利用它解决互斥问题,确保多个进程对共享资源的原子访问;同时,也将探讨如何利用信号量实现进程间的同步,如经典的生产者-消费者问题,确保数据在正确的时序下被生产和消费。

通过本章学习,你将掌握从零起点构建本机 IPC 系统的能力,理解不同机制的优劣与适用边界,为后续网络编程及分布式系统设计打下坚实基础。

课程目录

1 为什么需要进程间通信 (09:51).mp4
 2 进程空间的独立性 (15:16).mp4
 3 Linux的进程间通信机制有哪些 (12:43).mp4
 4 无名管道的通信原理 (19:23).mp4
 5 无名管道—单向通信 (26:44).mp4
 6 无名管道—双向通信 (17:17).mp4
 7 有名管道 (09:54).mp4
 8 有名管道—单向通信 (23:19).mp4
 9 有名管道—双向通信 (16:48).mp4
 

10 多进程和多线程 (10:15).mp4
 

11 System V IPC概述 (18:43).mp4
 

12 消息队列 1 (19:37).mp4
 13 消息队列2 (19:36).mp4
 14 消息队列3 (26:05).mp4
 

15 消息队列 4 (22:58).mp4
 16 共享内存1 (22:47).mp4
 17 共享内存2 (28:56).mp4
 18 共享内存3 (32:49).mp4
 

19 信号量概述 (23:18).mp4
 

20 信号量实现互斥的原理 (26:26).mp4
 21 信号量实现互斥1 (18:35).mp4
 22 信号量实现互斥2 (30:45).mp4
 23 信号量实现互斥3 (23:49).mp4
 24 信号量实现同步1 (29:37).mp4
 25 信号量实现同步2 (12:37).mp4