gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:44:04 26 4
gpt4 key购买 nike

我正在尝试实现一个非常非常大的字典搜索来匹配 PHP 句子中的单词。我最初的想法是使用 Aho-corasick 算法,因为 Aho-corasick 解决了我的确切问题。我首先在 PHP 中实现了一个 Trie。 Trie 在被缓存时会成为一个足够快的字典;但是,它占用大约 3mb 的内存。这在 PHP 中无法很好地扩展。

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

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

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

最佳答案

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

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

PHP 始终不共享任何内容,否则您会破坏内容。您可以编写看起来好像在共享内存的代码,但事实并非如此;规则绝不能被打破。

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

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

对于 PHP 扩展,合适的语言通常是指 C 或 C++,但如果您有足够的创造力,也可以指其他语言。

你仍然不能违反规则,但你不需要。

显然,这取决于您做这些事情的能力。

关于php - 如何在 PHP 中的 HTTP 请求之间共享内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32998800/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com