首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在PHP中的HTTP请求之间共享内存?

如何在PHP中的HTTP请求之间共享内存?
EN

Stack Overflow用户
提问于 2015-10-07 17:31:35
回答 4查看 2.3K关注 0票数 5

我正在尝试实现一个非常、非常大的字典搜索,以匹配PHP句子中的单词。我最初的想法是使用Aho-corasick算法,因为Aho-corasick解决了我的确切问题。我第一次用PHP实现了Trie。Trie在缓存时会产生足够快的字典;然而,它占用了大约3mb的内存。在PHP中,这不是很好的扩展。

显然,无论我们使用什么数据结构,一个大字典都会占用大量的内存。我只需要字典的一个实例,因为它是静态的,不需要重建。

如果这个对象可以在所有线程之间共享,那么3mb的内存是可以忽略不计的,但是,我不确定如何在PHP中的线程之间共享内存。

如何在HTTP请求之间共享此对象?当每个线程都需要仅由Trie创建的3mb开销时,我看不到项目的扩展。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-10-08 05:58:51

我写了(从APC和维护分叉) APCu:共享内存缓存不会对您有帮助。它们的内部存储区域已经有了定义的结构,您不能更改它。您可以将您的结构存储为对象,但是这些和其他值实际上是在PHP实例之间共享的。共享内存apc-类似于缓存,复制出每个请求值的上下文的共享内存。

我编写了p线程(PHP扩展):线程不会对您有帮助。就像APC必须从共享内存中复制一样,线程必须。

PHP一直都是不共享的,否则就会破坏一些东西。您可以编写看起来像是在共享内存的代码,但它不会是这样的;规则绝不能被打破。

我不认为PHP是一种明智的目标语言,如果一个主要的需求是效率,那么您似乎在第一段末尾就认识到了这一点。我可能错了,但鉴于上述所有事实,如果你不同意,我会感到惊讶的。

虽然这不是一种明智的语言,但它可以说是一个合理的平台。我将假设您希望在web应用程序上下文中使用它,并且目标是PHP,但更明智的做法是用合适的语言实现结构和算法,并通过扩展将其公开给web应用程序。

适合的语言通常是指PHP扩展的C或C++,但如果您有足够的创造性,则可以表示其他语言。

你仍然不能打破规则,但你不需要。

很明显,这取决于你做那些事情的能力。

票数 5
EN

Stack Overflow用户

发布于 2021-01-28 15:20:35

我不太确定我完全明白需要。

要在(同一客户端的)后续请求之间共享数据,可以使用会话或一些缓存。

要在后续请求(不是同一个客户端的请求)之间共享数据,可以使用一些缓存(Redis?)

要在多个线程之间共享数据(并在协同线程之间传递/持久化数据),您需要使用一个专用的多线程库(比如Swoole)来绕过PHP本身是单线程的事实。或者使用像RoadRunner这样的PHP平台来实现高效的复用,而不是php。

票数 0
EN

Stack Overflow用户

发布于 2015-10-07 18:14:24

您可以使用PThreads在php中执行多线程。

https://github.com/krakjoe/pthreads

它使用posix线程并提供同步、线程池和线程对象的读/写/可执行支持。

它运行在PHP7上。下面是一个具有两个计数器的程序,该程序异步运行。

代码语言:javascript
复制
<?php
   $thread1 = new class extends Thread {
       public function run() {
           for ($i = 0; $i < 10000; $i++) {
              echo "Hello thread1 ($i)\n";
           }
       }
   };

   $thread2 = new class extends Thread {
       public function run() {
           for ($i = 0; $i < 10000; $i++) {
              echo "Hello thread2 ($i)\n";
           }
       }
   };

   $thread1->start() && $thread1->join();
   $thread2->start() && $thread2->join();
?>
票数 -3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32998800

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档