Linux进程通信之共享内存

Linux进程通信之共享存储

概念:

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

PHP中的封装:

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

特点:

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

前提:

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

编写代码

父子进程

$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博客
请先登录后发表评论
  • 最新评论
  • 总共0条评论