当前位置: 首页 > news >正文

IPC(进程间通信)详解

🧠 什么是 IPC(Inter-Process Communication)?

IPC(进程间通信) 是指操作系统提供的一种机制,允许不同的进程之间交换数据、消息或信号。

一个进程是操作系统资源分配的基本单位,不同进程通常拥有各自独立的地址空间。为了协同工作,它们需要通过 IPC 来交换信息。


📦 IPC 的常见类型(按通信方式分类)

类型是否跨主机是否需要共享内存是否支持同步性能描述
管道(Pipe)单向通信,父子进程之间
有名管道(FIFO)可以在非亲缘进程间使用
消息队列(Message Queue)操作系统内核维护队列
信号(Signal)发送特定事件信号
共享内存(Shared Memory)多个进程共享一块内存区域
信号量(Semaphore)用于进程同步/互斥
套接字(Socket)低(跨网络)支持网络和本地通信
标准输入输出(Stdio)子进程通过 stdin/stdout 与主进程通信

🧱 常见 IPC 方式详解

1. 管道(Pipe)

  • 匿名管道:仅限于父子进程通信。

  • 特性:半双工,一端写,一端读。

  • 示例(Linux shell):

    ls | grep txt
    

2. 有名管道(FIFO)

  • 创建文件名用于通信,允许非父子进程间使用。

  • 示例:

    mkfifo /tmp/myfifo
    echo "Hello" > /tmp/myfifo
    cat /tmp/myfifo
    

3. 消息队列(Message Queue)

  • 操作系统提供队列,进程可向其中发送或接收消息。
  • 示例函数:msgsnd() / msgrcv()(Unix)

4. 信号(Signal)

  • 用于进程通知,如 SIGINT, SIGKILL, SIGUSR1

  • 示例(发送信号):

    kill -USR1 <pid>
    

5. 共享内存(Shared Memory)

  • 多个进程访问一块共享内存,速度最快。
  • 需配合信号量实现同步。

6. 信号量(Semaphore)

  • 用于控制对共享资源的访问,实现同步与互斥。

7. 套接字(Socket)

  • 支持本地通信,也支持网络间通信。
  • 常用于客户端/服务端架构。

8. 标准输入输出(Stdio)

  • 父进程通过 stdin 写入,stdout 读取子进程数据。
  • 常用于 JSON-RPC、LSP、AI 工具。

🔄 常见对比表

IPC方式跨平台同步控制适用场景速度
Pipe父子进程通信
FIFO任意进程通信
Message Queue多任务消息传递
Shared Memory大数据高效传输✅ 高
Semaphore同步与互斥✅ 高
Socket网络通信、客户端/服务端模型❌ 慢
Stdio启动本地服务、脚本通信✅ 快

💡 实用示例:Node.js + Python 使用 Stdio 通信

Node.js 主程序

import { spawn } from "child_process";const py = spawn("python", ["my_script.py"]);
py.stdin.write("hello\n");py.stdout.on("data", (data) => {console.log("Python 返回:", data.toString());
});

Python 子程序

import sysfor line in sys.stdin:sys.stdout.write(f"接收到:{line}")sys.stdout.flush()

🚀 应用场景总结

场景推荐 IPC 方式
编辑器插件(如 VSCode LSP)stdiosocket
网络服务(浏览器通信)WebSocket, HTTP, socket
容器间通信socketmessage queue
高速大数据通信shared memory + semaphore
简单脚本交互pipestdio

✅ 总结

  • IPC 是实现多进程协作的核心机制。
  • 不同 IPC 方式适配不同场景:性能、同步、跨主机是主要考量维度。
  • 在前后端协作、服务编排、本地 AI 工具调用中,IPC 是不可或缺的基础设施。

相关文章:

  • 升级背后:CANOPEN转MODBUS TCP技术如何实现精准控制?
  • Socket 编程
  • 【中间件】Web服务、消息队列、缓存与微服务治理:Nginx、Kafka、Redis、Nacos 详解
  • 认识电子元器件---高低边驱动
  • Day49 Python打卡训练营
  • IT供电系统绝缘监测及故障定位解决方案
  • 前端小程序面试题
  • SQL 注入:JDO与Hibernate
  • UI自动化测试:现状,效果和最佳实践
  • SQLAlchemy的子查询subquery()
  • 【100%完美解决】jupyter无法导入已安装的包【notebook中无法import安装在虚拟环境的包】
  • 华为云Flexus+DeepSeek征文 | 基于Dify构建网站智能客服
  • STM32嵌套向量中断控制器(NVIC)及外部中断使用案例分析
  • python Day46 学习(日志Day15复习)
  • ETS5430:多通道高性能汽车以太网接口卡
  • 【版本控制】GitHub Desktop 入门教程与开源协作全流程解析
  • uniapp获取当前位置和经纬度信息
  • C++之list的自我实现
  • Conda 创建新环境时报错 HTTP 502,如何解决?
  • ava多线程实现HTTP断点续传:原理、设计与代码实现
  • 最新网站建设技术/网站制作工具有哪些
  • 网站开发jquery/如何在微信上做推广
  • 外贸网站怎么推广/站长工具果冻传媒
  • 淘宝客网站一定要备案吗/南宁网站seo优化公司
  • 网站建设怎么样/成都搜索优化整站优化
  • 网站空间后台密码/论文收录网站有哪些