加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

PHP共享内存行使与信号节制实例说明

发布时间:2021-05-17 08:56:58 所属栏目:编程 来源:网络整理
导读:本篇章节讲授PHP共享内存行使与信号节制。供各人参考研究详细如下: 共享内存 共享内存的行使首要是为了可以或许在统一台呆板差异的历程中共享一些数据,好比在多个 php-fpm 历程中共享当前历程的行使环境。这种通讯也称为历程间通讯(Inter-Process C

本篇章节讲授PHP共享内存行使与信号节制。分享给各人供各人参考,详细如下:

共享内存

共享内存的行使首要是为了可以或许在统一台呆板差异的历程中共享一些数据,好比在多个 php-fpm 历程中共享当前历程的行使环境。这种通讯也称为历程间通讯(Inter-Process Communication),简称 IPC。

PHP 内置的 shmop 扩展 (Shared Memory Operations) 提供了一系列共享内存操纵的函数(也许是用的人不多吧,这一块儿的文档还没有中文翻译)。在 Linux 上,这些函数直接是通过挪用 shm* 系列的函数实现,而 Winodows 上也通过对体系函数的封装实现了同样的挪用。

首要函数:

与此相干的尚有一个很重要的函数:ftok,通过文件的 inode 信息(*nix 上通过 stat 或 ls -i 呼吁查察)建设 IPC 的独一 key(文件/文件夹的 inode 是独一的)。这个函数在 Linux 上也是直接挪用同名的体系函数实现,Windows 上照旧行使一些封装。

一个简朴的计数例子:

以上这段代码没执行一次计数加 1,并且数据是在差异历程之间共享的。也就是说除非手动删除这块内存行使,不然这个数据是不会重置的。

有个必要轻微留意的点:shmop_open 的第二个参数是个 flag,相同 fopen 的第二个参数,其取值有早年几个:

"a" 只读会见;

"c" 假如内存片断不存在,则建设,假如存在,则可读写;

"w" 读写;

"n" 建设新的内存片断,假犹如样 key 的已存在,则会建设失败,这是为了安详行使共享内存思量。

另外,因为行使的共享内存片断是牢靠长度的,在存储和读取的时辰要计较好数据的长度,否则也许会写入失败可能读取空值。

信号节制

既然上面行使到了共享内存存储数据,就必要思量是否有多个历程同时写入数据到共享内存的环境,是否必要停止斗嘴。假如是这样,就必要引入信号量举办节制。

PHP 也提供了相同的内置扩展 sysvsem(这个扩展在 Windows 情形下没有,文档中将 ftok 函数也归到这个扩展中,但现实上ftok 是在尺度函数库中提供的,以是在 Windows 下也是可用的)。

在说信号量节制之前,先说其它一件故意思的工作:看官方文档你会发明这里同样也有共享内存操纵的函数(shm_*),由于这着实是统一种别(可能说来自于统一作者)的三个扩展,尚有一个是 sysvmsg(行列动静) 。函数的实现上稍有不同,但现实做的工作基内情同。这和上文的 shmop 扩展有什么区别呢?shmop 源码下的 README 文件有简朴的声名:

,unfortunately this extension was designed with PHP only in mind and offers high level features which are extremely bothersome for basic SHM we had in mind.

简朴说来:sysvshm 扩展提供的要领并不是原封不动的存储用户的数据,而是先行使 PHP 的变量序列化函数对参数举办序列化然后再举办存储。这就导致通过这些要领存储的数据无法和非 PHP 历程共享。不外这样也能存储更富厚的 PHP 数据范例,上文的扩展中 shmop_write 只能写入字符串。那么为什么 sysvshm 同样不支持 Windows 呢?由于其并没有引入封装了 shm* 系列函数的tsrm_win32.h 的头文件。

引入信号节制之后的示例:

可是当地想模仿实现写入斗嘴现实上长短常难的(思量到计较机的执行速率)。在当地测试中,行使 for 轮回操纵时假如不行使shmop_close 封锁资源会呈现无法打开共享内存的错误告诫。这应该是由于正在共享内存被上一次操纵占用中还没有开释导致。

更多关于PHP相干内容感乐趣的读者可查察本站专题:《》、《》、《》及《》

但愿本文所述对各人PHP措施计划有所辅佐。

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读