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

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

一、核心目标

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

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

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

三、选择建议

  • 追求极致性能、大数据 :选共享内存 + 信号量。
  • 本地结构化、异步消息 :选消息队列。
  • 简单父子进程数据流 :选匿名管道。
  • 无亲缘进程简单通信 :选命名管道。
  • 跨网络 / 通用场景 :选Socket(TCP/UDP)。
  • 仅需通知 / 控制 :选信号。
相关推荐
流浪0015 小时前
Linux系统篇43——线程(八) 线程的数据不一致问题,从 ticket-- 的非原子性说起
linux·操作系统·线程·线程安全·锁
小小小小钰儿2 天前
2.3-云端API集成
人工智能·计算机·网络安全·操作系统·编程
做系统的大强2 天前
脚本说 PASS、OS 读全零 —— 到底是谁在撒谎?
后端·操作系统
小小小小钰儿2 天前
2.2-模型微调
人工智能·深度学习·机器学习·计算机·网络安全·操作系统·编程
小小小小钰儿3 天前
2.1-Windows本地部署大模型
人工智能·windows·计算机·网络安全·操作系统·编程
流浪0014 天前
Linux系统篇39——线程(四) pthread库的由来和线程的创建与等待
linux·操作系统·线程·pthread库
流浪0014 天前
Linux系统篇42——线程(七) pthread库管理线程的工作流,从创建到回收
linux·操作系统·线程·线程创建到销毁
云计算练习生4 天前
什么是 Linux?从 Unix 到开源生态的完整脉络
linux·开源·操作系统·unix
云计算练习生5 天前
什么是上下文切换?进程切换时 CPU 到底在保存什么
linux·服务器·操作系统·进程切换
CS创新实验室7 天前
为什么三台机器就能选出一个“带头大哥“?——Raft 一致性算法,一次讲透
分布式·操作系统