操作系统(4)第二章- 进程通信

进程通信(IPC,Inter-Process Communication)是操作系统中让独立进程交换数据、同步协作的核心机制,用于打破进程间内存隔离,实现多进程协同。

一、核心目标

  • 数据传输:在进程间传递字节流、结构化数据或文件数据。
  • 同步协作:协调执行顺序,避免资源竞争。
  • 资源共享:共享内存、文件等,减少数据拷贝。

二、主流通信方式(原理 + 特点 + 场景)

1. 管道(Pipe)
  • 匿名管道 :内核缓冲区实现,半双工、单向 ,仅用于父子 / 兄弟进程 ,遵循 FIFO。
    • 优点:简单、系统原生、开销小。
    • 缺点:单向、仅亲缘进程、缓冲区有限。
    • 场景:Shell 命令串联(ls | grep)。
  • 命名管道(FIFO) :以文件形式存在于文件系统,无亲缘进程也可通信 ,仍单向、FIFO。
    • 优点:突破亲缘限制、持久化存在。
    • 缺点:单向、需处理阻塞。
    • 场景: unrelated 进程间简单数据传递。
2. 消息队列(Message Queue)
  • 原理:内核维护消息链表,消息含类型 + 数据,可按类型过滤,支持异步。
  • 优点:结构化消息、异步、支持优先级、多进程读写。
  • 缺点:两次拷贝、消息大小受限、需手动清理。
  • 场景:订单 - 支付、任务分发等结构化消息场景。
3. 共享内存(Shared Memory)
  • 原理:将同一块物理内存映射到多个进程地址空间,零拷贝、直接读写
  • 优点:性能最高、适合大数据量、低延迟。
  • 缺点:无内置同步,需搭配信号量 / 互斥锁防竞争。
  • 场景:实时图像处理、高速数据交换。
4. 信号量(Semaphore)
  • 原理:计数器 + 等待队列,用于同步与互斥,控制临界区访问。
  • 优点:解决竞态、支持多进程同步。
  • 缺点:仅用于同步,不传输数据、编程复杂。
  • 场景:配合共享内存、资源池访问控制。
5. 信号(Signal)
  • 原理:软件中断,内核向进程发送信号(如SIGINTSIGKILL),进程注册处理函数。
  • 优点:轻量、异步、系统原生、开销极低。
  • 缺点:仅传信号类型、无数据、不可靠。
  • 场景:进程终止、异常通知、简单控制。
6. 套接字(Socket)
  • 原理:通用 IPC,支持本地(Unix Domain Socket)与跨网络(TCP/UDP) ,全双工。
    • TCP:面向连接、可靠、字节流。
    • UDP:无连接、不可靠、数据报、快。
  • 优点:跨主机、双向、通用、成熟生态。
  • 缺点:本地通信有两次拷贝、网络有额外开销。
  • 场景:Web 服务、客户端 - 服务器、分布式系统。

三、选择建议

  • 追求极致性能、大数据 :选共享内存 + 信号量
  • 本地结构化、异步消息 :选消息队列
  • 简单父子进程数据流 :选匿名管道
  • 无亲缘进程简单通信 :选命名管道
  • 跨网络 / 通用场景 :选Socket(TCP/UDP)
  • 仅需通知 / 控制 :选信号
相关推荐
fanged11 小时前
RASPI裸机7(exceptions)
操作系统·嵌入式
_OP_CHEN13 小时前
【Linux系统编程】(四十六)线程池原理与实现:从固定线程池到线程安全单例模式
linux·单例模式·操作系统·线程池·进程·线程安全·c/c++
F_Quant8 天前
🚀 Python打包踩坑指南:彻底解决 Nuitka --onefile 配置文件丢失与重启报错问题
python·操作系统
序安InToo8 天前
第6课|注释与代码风格
后端·操作系统·嵌入式
chlk12310 天前
Linux文件权限完全图解:读懂 ls -l 和 chmod 755 背后的秘密
linux·操作系统
张小潇13 天前
AOSP15 Input专题InputManager源码分析
android·操作系统
何中应13 天前
vi编辑器使用
linux·后端·操作系统
何中应13 天前
Linux进程无法被kill
linux·后端·操作系统
何中应13 天前
rm-rf /命令操作介绍
linux·后端·操作系统