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

【Linux系统与网络编程】06:进程间通信

进程间通信


进程地址空间相互独立

Linux环境下进程地址空间相互独立,每个进程各自有不同的用户地址空间。

任何一个进程的全局变量在另一个进程中都看不到,所以进程和进程之间不能相互访问,如果要交换数据就必须通过内核,

在内核中开辟一块缓冲区,进程1把数据从用户空间拷贝到内核缓冲区,进程2再从内核缓冲区中把数据读走,内核提供的这种机制称为进程间通信IPC,

在这里插入图片描述

进程间通信方式

进程间通信的方式有5种

  1. 消息传递:
    • 管道pipe:一种半双工的通信方式,数据只能单向流动,并且只能在具有亲缘关系的进程间使用(父子进程通信)。
    • 命名管道FIFO:一种半双工通信方式,允许无亲缘关系的进程进行通信,
    • 消息队列:消息链表、存放在内核中并由消息队列标识符标识,克服了信号传递信息少、管道只能承载无格式字节流、以及缓冲区大小受限等缺点,
    • 信号:比较复杂的通信方式,用于通知接收进程某个事件已经发生,
  2. 消息同步:
    • 互斥锁:以排他方式防止数据结构被并发修改的方法,
    • 读写锁:许多个线程同时读共享数据,而对写操作是互斥的,
    • 条件变量:以原子的方式阻塞进程,直到某个特定条件为真为止。对条件的测试是在互斥锁的保护下进行的。条件变量始终与互斥锁一起使用。
    • 信号量机制:计数器用来控制多个进程对共享资源的访问,作为一种常见的锁机制。主要作为进程间以及同一进程内不同线程之间的同步手段。
    • 文件和记录锁:
  3. 共享内存:匿名的和具名内存映射
    • 映射一段能被其他进程所访问的内存(这段共享内存由一个进程所创建,但多个进程都可以进行访问),
    • 共享内存是最快的IPC方式,针对其他进程间通信方式运行效率低而专门设计的。
    • 往往与其他通信机制,如信号量配合使用,来实现进程间的同步和通信。
  4. 远程过程调用RPC:
    • 进程间通信的机制,与其他机制不同的是,可用于不同设备间的进程的通信。
  5. 套接字通信socket:
    • 进程间通信的机制,与其他机制不同的是,可用于不同设备间的进程的通信。

在进程间完成数据传递需要借助操作系统提供的特殊方法,如:文件、管道、信号、共享内存、消息队列、套接字、命名管道等。部分方法由于自身设计缺陷被淘汰或者弃用,现今常用的进程间通信方式包括:

  1. 管道:使用简单
  2. 信号:开销最小/速度更快
  3. 共享映射区/共享内存:无血缘关系
  4. 本地套接字:最稳定/复杂度最高

管道

在这里插入图片描述

在这里插入图片描述

命名管道

在这里插入图片描述

共享存储映射

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

http://www.dtcms.com/a/277263.html

相关文章:

  • Day 19: 标准库巡礼:Python的“百宝箱”
  • c++学习之---红黑树的实现
  • CentOS 7 升级系统内核级库 glibc 2.40 完整教程
  • MSVCP*.dll、vcruntime*.dll缺失或损坏,以及.NET Framework相关问题,解决办法
  • 移动端设备本地部署大语言模型(LLM)
  • 【论文阅读】基于注意力机制的冥想脑电分类识别研究(2025)
  • LabVIEW智能避障小车
  • C/C++数据结构之多维数组
  • vue3 el-select默认选中
  • Java_Springboot技术框架讲解部分(二)
  • 【Linux内核模块】模块加载函数--从启动到运行的幕后推手
  • MySQL 分表功能应用场景实现全方位详解与示例
  • 算法学习笔记:19.牛顿迭代法——从原理到实战,涵盖 LeetCode 与考研 408 例题
  • 先“跨栏”再上车 公交站台装70厘米高护栏 公司回应
  • Mock 数据的生成与使用全景详解
  • 知识蒸馏:模型压缩与知识迁移的核心引擎
  • 通过同态加密实现可编程隐私和链上合规
  • GraphRAG:融合知识图谱与RAG的下一代信息检索框架
  • 【RK3568 平台I2C协议与AGS10驱动开发】
  • 深度学习16(对抗生成网络:GAN+自动编码器)
  • Vue单文件组件与脚手架工程化开发
  • 【数据结构】图 ,拓扑排序 未完
  • 弹性布局详解
  • mmap映射文件
  • 【设计模式】命令模式 (动作(Action)模式或事务(Transaction)模式)宏命令
  • 【STM32实践篇】:F407 时钟系统
  • fiddler/charles https配置完毕依然无法抓取APP https请求的解决办法
  • h() 函数
  • 【RA-Eco-RA6E2-64PIN-V1.0 开发板】ADC 电压的 LabVIEW 数据采集
  • Excel的学习