unix共享内存要点

共享内存优点:

    1.在进程之间不通过内核传递数据,即不通过系统调用拷贝数据,达到快速,高效的数据传输。

    2.随内核持续

    *nix的共享内存有两套API:Posix和System V

    两者的主要差别是共享内存的大小

        1.Posix共享内存大小可通过函数ftruncate随时修改

        2.System V共享内存大小在创建时就已经确定,而且最大值根据系统有所不同

    Posix共享内存

    #include <sys/mman.h>  (mmap,munmap,msync,shm_open,shm_unlink)

    最主要的函数  -- mmap

    void* mmap(void* addr,size_t len,int prot,int flags,int fd,off_t offset)

    函数将一个句柄映射到内存中,这个句柄可以是open的文件句柄,也可以是shm_open的共享内存区对象。

    *nix一切皆文件的观点,shm_open也是在/dev/shm目录下创建一个文件对象,返回对象的描述符。

    mmap将句柄作为共享内存的底层支撑对象,映射到内存中,这样可以不通过read、write在进程之间共享内存。由此推测一下,在*nix的进程间传 递数据更加原始的方法是进程间读写一个文件。但是频繁的open、read、write、lseek系统调用会消耗过多的计算资源。所以想到了将这个文件 句柄映射到内存中,这样就提高了进程间传递数据的效率。

    需要注意的函数 -- msync

    当修改了内存映射区的内存后,内核会在某个时刻将文件的内容更新。为了确信文件被更新,调用函数msync.文件的更新可以是同步(MS_SYNC)也可以是异步(MS_ASYNC)。(估计这里也是调用了函数write更新文件)

    System V共享内存

    #include <sys/shm.h>  (shmget,shmat,shmdt,shmctl)

    由于System V的共享内存有大小的限制,所以可考虑,使用共享内存数组来解决这个问。虽然数组的大小即一个进程可以获取共享内存的数量也是有限制,但是可以缓解System V单个共享内存过小的问题。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Python小白进阶之旅

ConfigParser:Python中对于ini格式的配置文件的使用

文章链接: http://note.youdao.com/noteshare?id=dfec323b2c6509d7189453ec730b3870&sub=7...

2022
来自专栏黑白安全

C++如何调用class类中方法实现多线程编程

众所周知在使用C++创建多线程执行时只能传递一个方法到thread模块中去创建线程执行。但是有时候我们往往需要使用多线程去执行某个对象中的方法,而对象中的方法却...

1212
来自专栏GreenLeaves

JavaScript之JS的执行环境和作用域

 一、执行环境是JavaScript中最为重要的一个概念。执行环境定义了变量或函数有权访问的其他数据,决定了他们各自的行为,每个执行环境都有一个与之关联的变量对...

1735
来自专栏云霄雨霁

Java虚拟机--类加载的时机

1807
来自专栏企鹅号快讯

PHP高级特性之反射

反射-Reflection 面向对象编程中对象被赋予了自省的能力,而这个自省的过程就是反射。 反射,直观理解就是根据到达地找到出发地和来源。比如,一个光秃秃的对...

2619
来自专栏我的博客

php命名空间详解

1、命名空间概述 从广义上来说,命名空间是一种封装事物的方法。在很多地方都可以见到这种抽象概念。例如,在操作系统中目录用来将相关文件分组,对于目录中的文件来说,...

3238
来自专栏Golang语言社区

C和Go相互调用

C可以调用Go,并且Go可以调用C, 如果更进一步呢, C-->Go-->C 或者 Go-->C-->Go的调用如何实现?

1903
来自专栏mwangblog

bash中的变量

1288
来自专栏Web项目聚集地

你真的懂「类的加载机制」吗?

高广超 :多年一线互联网研发与架构设计经验,擅长设计与落地高可用、高性能互联网架构。目前就职于美团网,负责核心业务研发工作。本文首发在 高广超的简书博客,欢迎点...

1733
来自专栏猿人谷

unix共享内存要点

共享内存优点:     1.在进程之间不通过内核传递数据,即不通过系统调用拷贝数据,达到快速,高效的数据传输。     2.随内核持续     *nix的共享内...

18310

扫码关注云+社区

领取腾讯云代金券