数码资讯
在单个服务器的PHP进程之间共享内存的一种方法
如果开发者想让PHP程序实现共享内存的读写,首先我们必须支持IPC的功能,即PHP编译和安装两个选择--使shmop --使sysvsem。 IPC(进程间通信)是一个UNIX标准的机制,提供了一种方法,使它能够与另一个不同的进程在同一台主机进行交互。有IPC处理的3大基本机制:它们共享内存、信号量
选购提示
关注价格、性能、续航、售后和真实使用场景,理性比较后再下单。
如果开发者想让PHP程序实现共享内存的读写,首先我们必须支持IPC的功能,即PHP编译和安装两个选择--使shmop --使sysvsem。
IPC(进程间通信)是一个UNIX标准的机制,提供了一种方法,使它能够与另一个不同的进程在同一台主机进行交互。有IPC处理的3大基本机制:它们共享内存、信号量、消息队列,分别。在这篇文章中,我们主要讨论共享内存和信号量的使用。
采用不同的处理进程间共享内存来实现不同进程之间的相互作用的一个好方法。如果你写一段信息的共享内存中的一个过程,那么所有其他进程也可以看出是写数据。非常方便 u3002with PHP中的共享内存的帮助下,可以实现不同的过程返回不同的结果一样运行PHP脚本时,或实现PHP运行在同一时间数的实时查询等。
共享内存允许两个或多个进程共享一个给定的存储区域。因为数据不需要在客户端和服务器之间复制,所以这是最快的IPC。使用共享内存的惟一诀窍是将多个进程同步访问给定的存储区域。
如何构建共享内存段下面的代码可以帮助您构建共享内存。
复制代码代码如下:shm_id美元= shmop_open(美元,美元美元美元模式,烫发,大小);
注意到每一个共享内存段PHP有一个唯一的ID,shmop_open返回共享内存段的ID。在这里,我们记录它的shm_id.and美元美元,关键是我们在逻辑上表示共享内存段的关键价值。不同的进程可以共享同一段存储只要相同的密钥ID被选中。这是习惯,我们使用一个字符串的哈希值(类似文件名)作为一个关键的ID。$模式来指定要使用的共享内存段的方式,因为它是新的,它is'c创造的。如果你是共享内存,你已经建立了,请use'a'to以访问的意义,$perm参数定义的权限,8,和权限的定义,请参阅UNIX文件系统的帮助。$大小定义的共享内存的大小。虽然有点像fopen(文件处理),你不想被SA我作为文件处理。后面的描述你会看到。
例如:
复制代码代码如下:shm_id美元= shmop_open(0xff3,C
在这里,我们打开一个共享内存段的核心价值0xff3 - rw-r -R格式,大小为100字节。
如果你需要一个现有的共享内存段,你必须设置为第三,在呼叫shmop_open第四参数0。
在Unix上,你可以用一个命令行程序,点查询所有IPC资源的系统状态。然而,一些系统需要一个超级用户能够执行。下图是一段描述结果。
系统显示4个共享内存段上面的图像,并注意第四的0x00000ff3关键值由PHP程序,我们刚刚跑了。为IPC的使用,请参阅Unix用户手册。
如何释放共享内存
释放共享内存的方式是调用PHP指令:shmop_delete($id)
复制代码代码如下:shmop_delete($id);
为ID的shmop_op返回值,你叫shmop_open.one另一种方法是使用Unix的管理指令:
ipcrm ID,ID的ID。你看到的点,不一样的$id程序。但要小心,如果你删除共享内存段的直接和ipcrm,可能导致其他不知道过程介绍一些不可预知的错误时,引用了共享存储设备不再存在。
如何使用(读写)共享内存
使用以下函数将数据写入共享内存
复制代码如下:int shmop_write(int shmid,字符串数据,数组偏移量)
shmid是一柄由shmop_open.the $data变量返回存储的数据被存储,抵消了美元从共享内存的开始写的第一个字节的位置(从0开始)。
读操作是:
复制代码如下:字串shmop_read(int shmid,起始,int数)
同时,指定shmid美元开始偏移,(从0开始),读的总次数。返回结果字符串。在这种方式中,你可以使用共享内存段作为一个字节数组。读一些写一些,你想做什么,很方便。
现在,你应该没有问题,阅读和写作,创作,并在一个单独的PHP程序删除共享内存。但是,很显然,一个PHP进程运行在实际操作中是不可能的。如果你仍然使用一个单一的过程,在多进程的情况下,你会有一个问题著名的并行和相互排斥的问题。例如,有2个进程需要同时读写相同的记忆。当两个进程执行写操作的同时,你会得到一个错误的数据,因为内存可能会在内容上执行的过程,甚至是一个混合2戴维的鹿在随机出现的数据的过程写的。这显然是不可接受的。为了要解决这个问题,必须引入互斥机制。互斥机制在许多操作系统教材,也不在这里重复。实现互斥机制是使用信号灯的最简单的方法。信号量是另一种进程间的通信(IPC),这是不同的其他IPC机制(管道、FIFO、消息队列),它是一种控制由多个进程共享数据存储记录仪。相同的是,你可以使用ipcs和ipcrm实现对信号灯的使用状态查询和删除它。在PHP,你可以使用下面的函数创建一个新的信号量并返回一个句柄的信号量,信号量,如果关键点已经存在的sem_get返回信号量操作手柄直接。
复制代码如下:int sem_get(int关键{ { int,int max_acquire,烫发} })
max_acquire表明美元的同时,有几个方法可以用来输入信号同时无需等待信号被释放(即最大数量的流程来处理资源的同时)。$perm指明权限。
一旦你有了成功的信号,你只需要做2件事:请求和释放。当你执行释放操作时,系统会降低信号的值。如果小于0,它被设置为0。当你执行请求操作时,系统会增加信号的值。如果该值大于最大值的设定,系统会把你的处理过程直到其他进程释放到小于最大值,最大值设置为1,那么,当一个进程获得请求的过程,其余的只能等待它退出互斥锁,然后释放信号量进入专属区,同时把它排斥。这个信号通常被称为二进制信号。当然,如果初始值是正数,它显示了许多共享资源单位可共享的应用。
IPC(进程间通信)是一个UNIX标准的机制,提供了一种方法,使它能够与另一个不同的进程在同一台主机进行交互。有IPC处理的3大基本机制:它们共享内存、信号量、消息队列,分别。在这篇文章中,我们主要讨论共享内存和信号量的使用。
采用不同的处理进程间共享内存来实现不同进程之间的相互作用的一个好方法。如果你写一段信息的共享内存中的一个过程,那么所有其他进程也可以看出是写数据。非常方便 u3002with PHP中的共享内存的帮助下,可以实现不同的过程返回不同的结果一样运行PHP脚本时,或实现PHP运行在同一时间数的实时查询等。
共享内存允许两个或多个进程共享一个给定的存储区域。因为数据不需要在客户端和服务器之间复制,所以这是最快的IPC。使用共享内存的惟一诀窍是将多个进程同步访问给定的存储区域。
如何构建共享内存段下面的代码可以帮助您构建共享内存。
复制代码代码如下:shm_id美元= shmop_open(美元,美元美元美元模式,烫发,大小);
注意到每一个共享内存段PHP有一个唯一的ID,shmop_open返回共享内存段的ID。在这里,我们记录它的shm_id.and美元美元,关键是我们在逻辑上表示共享内存段的关键价值。不同的进程可以共享同一段存储只要相同的密钥ID被选中。这是习惯,我们使用一个字符串的哈希值(类似文件名)作为一个关键的ID。$模式来指定要使用的共享内存段的方式,因为它是新的,它is'c创造的。如果你是共享内存,你已经建立了,请use'a'to以访问的意义,$perm参数定义的权限,8,和权限的定义,请参阅UNIX文件系统的帮助。$大小定义的共享内存的大小。虽然有点像fopen(文件处理),你不想被SA我作为文件处理。后面的描述你会看到。
例如:
复制代码代码如下:shm_id美元= shmop_open(0xff3,C
在这里,我们打开一个共享内存段的核心价值0xff3 - rw-r -R格式,大小为100字节。
如果你需要一个现有的共享内存段,你必须设置为第三,在呼叫shmop_open第四参数0。
在Unix上,你可以用一个命令行程序,点查询所有IPC资源的系统状态。然而,一些系统需要一个超级用户能够执行。下图是一段描述结果。
系统显示4个共享内存段上面的图像,并注意第四的0x00000ff3关键值由PHP程序,我们刚刚跑了。为IPC的使用,请参阅Unix用户手册。
如何释放共享内存
释放共享内存的方式是调用PHP指令:shmop_delete($id)
复制代码代码如下:shmop_delete($id);
为ID的shmop_op返回值,你叫shmop_open.one另一种方法是使用Unix的管理指令:
ipcrm ID,ID的ID。你看到的点,不一样的$id程序。但要小心,如果你删除共享内存段的直接和ipcrm,可能导致其他不知道过程介绍一些不可预知的错误时,引用了共享存储设备不再存在。
如何使用(读写)共享内存
使用以下函数将数据写入共享内存
复制代码如下:int shmop_write(int shmid,字符串数据,数组偏移量)
shmid是一柄由shmop_open.the $data变量返回存储的数据被存储,抵消了美元从共享内存的开始写的第一个字节的位置(从0开始)。
读操作是:
复制代码如下:字串shmop_read(int shmid,起始,int数)
同时,指定shmid美元开始偏移,(从0开始),读的总次数。返回结果字符串。在这种方式中,你可以使用共享内存段作为一个字节数组。读一些写一些,你想做什么,很方便。
现在,你应该没有问题,阅读和写作,创作,并在一个单独的PHP程序删除共享内存。但是,很显然,一个PHP进程运行在实际操作中是不可能的。如果你仍然使用一个单一的过程,在多进程的情况下,你会有一个问题著名的并行和相互排斥的问题。例如,有2个进程需要同时读写相同的记忆。当两个进程执行写操作的同时,你会得到一个错误的数据,因为内存可能会在内容上执行的过程,甚至是一个混合2戴维的鹿在随机出现的数据的过程写的。这显然是不可接受的。为了要解决这个问题,必须引入互斥机制。互斥机制在许多操作系统教材,也不在这里重复。实现互斥机制是使用信号灯的最简单的方法。信号量是另一种进程间的通信(IPC),这是不同的其他IPC机制(管道、FIFO、消息队列),它是一种控制由多个进程共享数据存储记录仪。相同的是,你可以使用ipcs和ipcrm实现对信号灯的使用状态查询和删除它。在PHP,你可以使用下面的函数创建一个新的信号量并返回一个句柄的信号量,信号量,如果关键点已经存在的sem_get返回信号量操作手柄直接。
复制代码如下:int sem_get(int关键{ { int,int max_acquire,烫发} })
max_acquire表明美元的同时,有几个方法可以用来输入信号同时无需等待信号被释放(即最大数量的流程来处理资源的同时)。$perm指明权限。
一旦你有了成功的信号,你只需要做2件事:请求和释放。当你执行释放操作时,系统会降低信号的值。如果小于0,它被设置为0。当你执行请求操作时,系统会增加信号的值。如果该值大于最大值的设定,系统会把你的处理过程直到其他进程释放到小于最大值,最大值设置为1,那么,当一个进程获得请求的过程,其余的只能等待它退出互斥锁,然后释放信号量进入专属区,同时把它排斥。这个信号通常被称为二进制信号。当然,如果初始值是正数,它显示了许多共享资源单位可共享的应用。
声明:本文内容用于数码产品信息整理与选购参考,具体价格、库存、售后政策以官方渠道和电商页面实时信息为准。