PHP 从共享内存中检索时是否复制变量?
如果我运行 shm_get_var(),它会返回一个“引用”,将数据保存在共享内存中吗?
我想在共享内存中保留一个大约 50MB 大小的数组,以便它可以被多个进程使用,而不必保留这个 50MB 数组的多个副本。如果共享内存不是答案,还有其他想法吗?
If I run an shm_get_var(), will it return a "reference", keeping the data in shared memory?
I'm wanting to keep an array about 50MB in size in shared memory so that it can be used by multiple processes without having to keep multiple copies of this 50MB array hanging around. If shared memory isn't the answer, does anyone have another idea?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
这是 PHP 5.2.9 中 sysvsem.c 中的相关 C 代码片段:
每次调用 shm_get 时,PHP 都必须反序列化整个值,这在 50MB 数组上会非常慢。
将其分解为个人价值观怎么样?
另外,您可能需要考虑使用 APC 的变量缓存,它将处理所有共享内存并为您锁定(并且还将使用哈希表进行键查找)
This is the relevant C code snippet from sysvsem.c in PHP 5.2.9 :
PHP will have to unserialize the entire value every time you call shm_get, which, on a 50MB array, is going to be really really slow.
How about breaking it up into individual values?
Also you might want to consider using APC's variable cache, which will handle all of the shared memory and locking for you (and will also use a hash table for key lookups)
我不是这方面的专家,但是是否可以为此编写一个快速测试,如下所示?
I'm no expert on this, but would it be possible to write a quick test for this something like the following?
形成文档的措辞
我想说是的,这是对共享内存空间的引用。
form the wording of the documentation
I would say yes it's a reference to the shared memory space.
你可以使用 shm_remove()
看看这个:http://php.net/manual/en/function。 shm-remove.php
you can use shm_remove()
Check this out: http://php.net/manual/en/function.shm-remove.php