进程间的通信方式-共享内存和内存映射区的区别

发布时间:2024年01月09日

shm和mmap的区别

共享内存和内存映射区都可以实现进程间通信,下面来分析一下二者的区别:

实现进程间通信的方式

  • shm: 多个进程只需要一块共享内存就够了,共享内存不属于进程,需要和进程关联才能使用
  • 内存映射区: 位于每个进程的虚拟地址空间中, 并且需要关联同一个磁盘文件才能实现进程间数据通信

效率:

  • shm: 直接对内存操作,效率高
  • 内存映射区: 需要内存和文件之间的数据同步,效率低

生命周期

  • 内存映射区:进程退出, 内存映射区也就没有了
  • shm:进程退出对共享内存没有影响,调用相关函数/命令/ 关机才能删除共享内存

数据的完整性 -> 突发状态下数据能不能被保存下来(比如: 突然断电)

  • 内存映射区:可以完整的保存数据, 内存映射区数据会同步到磁盘文件
  • shm:数据存储在物理内存中, 断电之后系统关闭, 内存数据也就丢失了
文章来源:https://blog.csdn.net/f593256/article/details/135481197
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。