您的位置 首页 php

47、php进程间通信

1、 进程间通信

前面,我们通过pcntl拓展的创建多个进程来共同完成一个任务。但是进程之间是没有任务交集。

那么,但进程之间需要产生交集时,怎么办?

备注: 这里的交集泛指进程之间的交互,比如抢占资源读写操作等

2、linux系统关于进程间的交互方式

2.1、概要图

2.2、消息队列

  • 交互图

  • 说明

消息队列在进程间通信充当第三者的角色,强调一方写入、一方读取

2.3、 共享内存

  • 交互图

  • 说明

共享内存在进程间通信充当共有读写资源的角色,多个进程都可以对其进行读写

2.4、 信号量

  • 交互图

  • 说明

信号量是预防资源抢占可能带来的 死锁 等问题,它强调必须获取信号量的进程,才能对资源进行读写操作。而其它进程则必须等待,直到它获取到信号量为止

2.5、信号

  • 交互图

  • 说明

信号接收者需要先注册好信号的处理方法

2.6、管道

  • 交互图

  • 说明

管道相当于在通信进程间安装了出水口,两者通过”这个出水口”进行信息交互

2.7、 sockets

  • 交互图

  • 说明

socket强调的是, 网络通信 。即这一边的进程通过socket绑定端口,开放服务。另一边的进程这个ip:port的方式,找到这个服务

3、php如何实现进程间通信

php中是以拓展的形式,对上述提到的通信方法进行实现。

  • pcntl扩展:主要的进程扩展,完成 进程创建 于等待操作。
  • posix扩展:完成posix 兼容机 通用 api ,如获取进程id,杀死进程等。
  • sysvmsg扩展:实现system v方式的进程间通信之消息队列。
  • sysvsem扩展:实现system v方式的信号量。
  • sysvshm扩展:实现system v方式的共享内存。
  • sockets扩展:实现socket通信

它们的安装和使用非常简单,在编译 PHP 时添加 –enable-sysvsem –enable-sysvshm –enable-sysvmsg 参数即可

文章来源:智云一二三科技

文章标题:47、php进程间通信

文章地址:https://www.zhihuclub.com/152478.shtml

关于作者: 智云科技

热门文章

网站地图