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

5、进程间有哪些通信方式【高频】

  • 管道

    • 对于匿名管道:

      • 匿名管道是一个单向的字节流,两端分别对应一个文件描述符,分别用来读和写
      • 匿名管道 本质就是内核内存中的一段缓冲区,它有文件的特质(可以写、读),但并没有文件实体
      • 管道只能在有关系的进程之间使用,如父进程与子进程、兄弟进程。因为这些有关系的进程是共享同一张文件描述符表的,所以它们可以对应同一个管道

      在这里插入图片描述

    • 对于有名管道:

      • 有名管道最大的特点就是 以 FIFO文件的形式 保存在磁盘上,关联着一个路径名。当进程退出之后,FIFO文件依然保存在文件系统中
      • 操作 FIFO文件和 操作一个普通文件是完全一样的(open、close、read、write),且只要两个进程都获取了这个路径,就可以用这个有名管道来通信。所以 没有关系的两个进程 也可以使用有名管道来通信
      • 虽然有名管道 有FIFO文件,但这个文件里面是没有内容的。有名管道的内容依然还是存储在内存中,即内核内存中的一段缓冲区
  • 内存映射

    • 内存映射可以把磁盘上文件的内容,映射到内存上。这样我们可以通过 修改内存上的内容 来修改磁盘文件。当我们 修改内存上的内容,系统会自动帮我们 同步到磁盘中,所以效率很高
      在这里插入图片描述

    • 两个进程里 打开同一个磁盘文件,并分别创建内存映射区,也就是总共由两个内存映射区

    • 它们各自通过在内存映射区上修改,来修改磁盘文件的内容,进而通过磁盘文件实现进程间的通信

    • 磁盘文件的大小必须>0,不能是空的

  • 匿名映射

    • 与内存映射(文件映射)不同,匿名映射没有文件实体,所以只能用于 有关系的进程之间的通信
  • 信号

    • 用于 发送通知 到进程,告知它发生了某种事件或条件
  • 共享内存

    • 效率最高的进程通信方式,没有之一
    • 共享内存就是 多个进程 共享同一块内存段,一个进程在 共享内存段里面写入,其他的进程都可用查看到。这个共享内存段 位于 进程的用户区,所以不太需要 内核的干涉,从而大大提高效率(比如 管道 就需要把 数据传入内核中的缓冲区,里面涉及两次 内核 和 用户区的切换,从而导致效率降低)
  • Socket套接字

    • 支持TCP/IP 网络通信 元,主要用于在 客户端 和 服务器 之间 通过网络 进行通信
    • socket本质上也是一个文件,有自己的fd。我们就是通过 fd 向一端的socket中写入数据(写缓冲区),然后在另一端的socket中读取数据(读缓冲区)

相关文章:

  • 蓝桥杯之日期问题2
  • 前端如何进行性能优化
  • Hbase分布式——储存机制
  • 人工智能中的特征是什么?
  • MySQL常用命令大全(可复制使用)
  • 深入理解 JavaScript 中的 this 指向
  • android计算屏幕尺寸dpi
  • Java设计模式-基于MVC的WEB设计模式
  • 【Springboot知识】Logback从1.2.x升级到1.3.x需要注意哪些点?
  • 谈谈 ES 6.8 到 7.10 的功能变迁(5)- 任务和集群管理
  • MotionLayout(二):MotionLayout是什么?MotionLayout调试技巧、KeyFrame关键帧等等
  • Desktop Builder 操作概述
  • 前端工程化---ES6
  • LeetCode刷题---栈---946
  • XXE漏洞:原理、危害与修复方法详解
  • AIP-153 导入和导出
  • Linux C++项目推荐:文件服务器+如何快速上手C++大项目
  • element组件教学,基础
  • Vue2+Element实现Excel文件上传下载预览
  • RAG(检索增强生成)原理、实现与评测方法探讨
  • 巴基斯坦军方:印度导弹袭击巴首都附近空军基地
  • 可量产9MWh超大容量储能系统亮相慕尼黑,宁德时代:大储技术迈入新时代
  • 身临其境感受伟人思想力量,“马克思书房”在上海社科馆揭幕
  • 乌克兰议会批准美乌矿产协议
  • 国家主席习近平同普京总统举行大范围会谈
  • 上交现场配乐4K修复版《神女》:默片巅峰有了新的打开方式