一、共享内存shm

1 概念:多个进程的地址空间都映射到同一块物理内存,这样多个进程都能看到这块物理内存,实现进程间通信,而且不需要数据的拷贝,所以速度最快。

二、内存映射mmap

1 前言:先介绍一下普通的读写文件的原理,进程调用read/write系统调用后会陷入内核,内核开始读写文件,假设内核是在读文件,内核先把文件读取到内核缓冲区,然后把内核缓冲区的数据拷贝到用户缓冲区,实际上整个过程拷贝了两次数据,即先从文件到内核缓冲区,再从内核缓冲区到用户缓冲区;

2 概念:把某个文件映射到进程的地址空间,通过对地址空间的读写,实现对文件的读写,mmap系统调用可以使多个进程映射同一个普通文件来实现共享内存。普通文件映射到地址空间后,进程可以像访问内存的方式一样去访问该文件,这样不需要调用read/write系统调用,减少了用户、内核切换的开销;

三、二者的比较

1 共享内存shm是在内存中创建空间,然后每个进程映射到此处;内存映射mmap是创建一个文件,然后每个进程映射到此处;

2 当机器重启时,mmap把文件保存在磁盘上,所以不会丢失,而共享内存shm存储在内存上就会丢失;

进程间通信(IPC)之内存映射mmap和共享内存shm相关推荐

  1. 进程间通信方式(三)-- IPC对象(消息队列、共享内存、信号灯集)

    IPC对象 1. IPC对象 2. 查看IPC对象命令 3. 消息队列 3.1 概念 3.2 相关函数 3.2.1 msgget() 创建或者打开消息队列 3.2.2 ftok() 获取键值 3.2. ...

  2. linux进程间通信快速入门【二】:共享内存编程(mmap、XSI、POSIX)

    文章目录 mmap内存共享映射 XSI共享内存 POSIX共享内存 参考 使用文件或管道进行进程间通信会有很多局限性,比如效率问题以及数据处理使用文件描述符而不如内存地址访问方便,于是多个进程以共享内 ...

  3. 文件内存映射mmap解决大文件快速读写问题和进程间共享内存

    mmap函数主要用途有三个: 1.将一个普通文件映射到内存中,通常在需要对文件进行频繁读写时使用,这样用内存读写取代I/O读写,以获得较高的性能: 2.将特殊文件进行匿名内存映射,可以为关联进程提供共 ...

  4. Linux下进程间通信方式之管道、信号、共享内存、消息队列、信号量、套接字

    /* 1,进程间通信 (IPC ) Inter-Process Communication比较好理解概念的就是进程间通信就是在不同进程之间传播或交换信息.2,linux下IPC机制的分类:管道.信号. ...

  5. 内存映射(mmap系统调用)

    映射虚拟内存-->物理内存/Swap/文件 文件映射到内存,内存访问取代IO访问 可以映射同一个文件以(进程)共享内存 Linux进程虚拟地址空间---(分成)-->虚拟内存区 虚拟内存区 ...

  6. [转载]linux内存映射mmap原理分析

    转自:http://blog.csdn.net/yusiguyuan/article/details/23388771 内存映射,简而言之就是将用户空间的一段内存区域映射到内核空间,映射成功后,用户对 ...

  7. linux mmap 内存映射 mmap() vs read()/write()/lseek()

    From: http://www.perfgeeks.com/?p=723 通过strace统计系统调用的时候,经常可以看到mmap()与mmap2().系统调用mmap()可以将某文件映射至内存(进 ...

  8. iOS之深入解析文件内存映射MMAP

    一.常规文件操作 常规文件操作(read/write)有以下重要步骤: 进程发起读文件请求: 内核通过查找进程文件符表,定位到内核已打开文件集上的文件信息,从而找到此文件的 inode: inode ...

  9. 【Linux】进程间通信 - 匿名/命名管道与System V共享内存

    目录 前言 一.管道 0.什么是管道 1).管道的概念 2).管道的本质 3).管道指令: "|" 1.匿名管道 1).如何创建匿名管道 2).如何使用匿名管道进行通信 3).匿名 ...

最新文章

  1. 番茄时间管理和四象限工作法完美搭配造就职场神器
  2. SQL99标准中的查询(MySQL)
  3. java xmlrpc2.0 实现_简单的java xmlrpc
  4. Javascript 对象二(Number、String、Boolean、Array、Date、Math、RegExp)
  5. 来了来了,HTML6展望!
  6. java混淆工具zelix比较_vscode,java环境
  7. Linux两个网卡mac地址重复,ARP响应Linux服务器上的单个MAC地址,同一网络上有多个接口...
  8. gulpsass安装配置
  9. 亲测window+iis+letsencrypt+ssl 手动续期(通配符域名)
  10. 深入解析WINDOWS操作系统
  11. 推荐一个语音机器人项目
  12. 博士申请 | 美国弗吉尼亚大学张尚彤老师招收强化学习方向全奖博士/硕士/实习生...
  13. 委托、事件 茴字有几种写法
  14. 计算机键盘连接不上,电脑键盘连接不上电脑是怎么回事
  15. x99芯片组 服务器,X99芯片组详情:不兼容的LGA2011-3插槽,6个USB 3.0接口
  16. 天数转换成具体有多少年多少月多少天
  17. Vim、Shell及Linux命令的高效使用
  18. python多进程优化_Python 的多进程,考虑到会发生死进程,如何收敛结束,安全又方便?...
  19. 《网络攻防》实验三:免杀原理与实践
  20. Datax和Kettle使用场景的对比

热门文章

  1. 编写简单的连接MongoDB数据库C++程序 解决编译C++程序时链接MongoDB动态库失败的问题...
  2. AttributeError: module 'pymysql' has no attribute 'escape' 错误的出现以及解决
  3. Android学习之四大组件简单介绍
  4. Kafka将逐步弃用对zookeeper的依赖
  5. 怎么样把c语言转变为汇编语言,如何把汇编语言转换成C语言
  6. oracle aia,[zz] What Are Oracle AIA, PIP and How Do They Work?
  7. python统计词频_python统计词频
  8. Jquery Mobile 画面导航栏共用的实现方法
  9. 白帽子发现美军网站SQL注入漏洞,可获取敏感数据
  10. leetcode最长递增子序列问题