根据定义,真正的线程不共享内存,因此无法共享数据。
然而,我正在寻找一种方法来保持正在运行的连接计数(不仅仅是连接,还包括其他一些东西),该计数可以从服务器中的任何一个线程内更新,并且将被共享(静态)跨所有线程。我该怎么做?一些注意事项:
性能是关键,因此没有数据库,没有外部服务器连接,最好没有 Memcached
此数据每秒更新数千次
从一个线程更新数据后,所有其他线程必须立即可以使用新值
理想情况下,数据应同时可供多个线程使用
最佳答案
使用Xcache ,您可以使用以下API:
int xcache_inc(string name [, int value [, int ttl]])
这将以原子方式递增由 name
标识的值,并将其存储在跨请求的共享内存中。要从 Apache 中任何正在运行的线程检索值,请使用:
mixed xcache_get(string name)
注意:当 Apache (httpd) 重新启动时,这些值将丢失。
注释 2:根据定义,线程确实共享内存,并且只要它们在同一进程中运行,就可以轻松共享数据。当性能至关重要并且大量数据在线程之间并行处理和协调时而不是可能较慢的 IPC 或复杂的共享内存解决方案时,这是使用它们的主要原因之一。然而,在线程之间共享数据很复杂,特别是当数据可变时,并且应该由那些对挑战有透彻了解的人来承担。
关于php - 在 Apache 上的 PHP 线程之间共享数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19920046/