根据定义,真正的线程不共享内存,因此无法共享数据。
但是,我正在寻找一种方法来保持一个正在运行的连接数(不仅仅是连接,其他一些东西),可以从服务器的任何一个线程中更新,并且将被共享(静态)跨越所有线程。我该怎么做?
一些注意事项:
性能是关键,所以没有数据库,没有外部服务器连接,最好没有Memcached
此数据意味着每秒更新数千次
从一个线程更新后,数据必须立即可用新值传递给所有其他线程
理想情况下,数据应同时可用于多个线程
答案 0 :(得分:2)
使用Xcache,您可以使用以下API:
int xcache_inc(string name [, int value [, int ttl]])
这将原子地增加name
标识的值,并将其存储在跨请求的共享内存中。要从Apache中的任何正在运行的线程中检索值,请使用:
mixed xcache_get(string name)
注意:重启Apache(httpd)时,这些值会丢失。
注2:根据定义,线程执行共享内存并轻松共享数据,因为它们在同一进程中运行。当性能至关重要且并行处理大量数据并在线程之间进行协调而不是可能较慢的IPC或复杂的共享内存解决方案时,这是使用它们的主要原因之一。但是,在线程之间共享数据是很复杂的,特别是当数据是可变的时,应该由那些对挑战有透彻了解的人来承担。