在 Apache 上的 PHP 线程之间共享数据


Sharing data between threads in PHP on Apache

根据定义,真正的线程不共享内存,因此不能共享数据。

但是,我正在寻找一种方法来保留正在运行的连接计数(不仅仅是连接,还有其他一些东西),该计数可以从服务器中的任何一个线程中更新,并将在所有线程之间共享(静态)。我该怎么做?

一些注意事项:

  • 性能是关键,所以没有数据库,没有外部服务器连接,最好没有Memcached。

  • 此数据旨在每秒更新数千次

  • 数据从一个线程更新后,必须立即可用,具有新值,供所有其他线程使用

  • 理想情况下,数据应同时可供多个线程使用

使用 Xcache,您可以使用以下 API:

int   xcache_inc(string name [, int value [, int ttl]])

这将以原子方式递增name标识的值,并将其存储在跨请求的共享内存中。 要从 Apache 中任何正在运行的线程中检索值,请使用:

mixed xcache_get(string name)

注意:当 Apache (httpd) 重新启动时,这些值将丢失。

注意 2:根据定义,线程确实共享内存并轻松共享数据,因为它们在同一进程中运行。 当性能至关重要并且大量数据在线程之间并行处理和协调时,这是使用它们的主要原因之一,而不是可能较慢的 IPC 或复杂的共享内存解决方案。 但是,在线程之间共享数据很复杂,特别是当数据是可变的并且应该由对挑战有透彻了解的人员进行时。