前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Linux进程通信之共享内存

Linux进程通信之共享内存

作者头像
北溟有鱼QAQ
发布2021-09-14 14:49:14
4.8K0
发布2021-09-14 14:49:14
举报
文章被收录于专栏:北溟有鱼QAQ

Linux进程通信之共享存储

概念:

共享内存指 (shared memory)在多处理器的计算机系统中,可以被不同中央处理器(CPU)访问的大容量内存。由于多个CPU需要快速访问存储器,这样就要对存储器进行缓存(Cache)。任何一个缓存的数据被更新后,由于其他处理器也可能要存取,共享内存就需要立即更新,否则不同的处理器可能用到不同的数据。共享内存是 Unix下的多进程之间的通信方法 ,这种方法通常用于一个程序的多进程间通信,实际上多个程序间也可以通过共享内存来传递信息。

PHP中的封装:

php中封装了shm开头的函数和shmop开头的函数,实际效果是一样的,具体使用方式请查看官方手册 ,下面我们以shm开头的为例演示

特点:

共享内存是将内存映射到其他进程的地址空间中,所以说共享内存也是最快的IPC进程通信方式

前提:

在使用IPC进程通信时,也就是信号量、消息队列、共享存储时,首先要先确定自己的PHP扩展是否已经开启,使用php -m 查看

编写代码

父子进程
代码语言:javascript
复制
$key = ftok('demo25.php','x');

//创建共享存储
$shmId = shm_attach($key,128);


$pid = pcntl_fork();

if($pid == 0)
{
    //获取数据
    $data = shm_get_var($shmId,1);
    fprintf(STDOUT,"recv data=%s\n",$data);
    exit(0);
}

//写入数据
shm_put_var($shmId,1,'test');


//回收子进程
$pid = pcntl_wait($status);



if($pid > 0)
{


    //删除共享存储

//    shm_remove($shmId);

    fprintf(STDOUT,"child process exit ok pid=%d\n",$pid);
}

执行代码,查看结果,发现父子进程之间也可以实现通信,至于非血缘关系的通信,则看我之前的文章,自己实现即可

当然,IPC进程间的通信数据也会保存在Linux系统中,可通过下面的方式,具体查看相关信息

并且如果想知道系统调用的哪些底层函数,则可以用 strace -f -s 6550 xxxx 执行查看底层函数,亦或者说根据php的函数去查看PHP官方C源码 php-src 并根据查到的相关C调用的函数,去查看 linux系统函数,了解相关知识 linux 文档

本文为北溟有鱼QAQ原创文章,转载无需和我联系,但请注明来自北溟有鱼QAQ https://www.umdzz.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/09/10 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Linux进程通信之共享存储
    • 概念:
      • PHP中的封装:
        • 特点:
          • 前提:
            • 编写代码
              • 父子进程
          相关产品与服务
          文件存储
          文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档