PHP.net manual中没有提及线程安全性。
我们正在使用nginx服务器运行Hiphop PHP。一台服务器每天接收订单量为3000万的请求。
团队成员说他们之前曾经观察到apc_store()的问题,当他们使用它来向系统的请求添加一些值时。由于多个线程正在运行,由nginx启动,似乎有些值会丢失,因为多个线程同时引用存储在缓存中的相同值并尝试更新它们。因此,在这些情况下,他们切换到了apc_inc()。
我的观察
这让我相信两者都是线程安全的。如果我错了,请纠正我。
更新
以下是/etc/hiphop/hiphop.hdf文件中可能相关的部分 -
Server {
SourceRoot = /var/cake_1.2.0.6311-beta/app/webroot
RequestTimeoutSeconds = 10
RequestMemoryMaxBytes = -1
DefaultDocument = fam/hiphop.php
Type = fastcgi
Port = 9000
IP = 0.0.0.0
ThreadCount = 140
ThreadRoundRobin = false
ThreadDropCacheTimeoutSeconds = 0
ThreadJobLIFO = false
StatCache = false
AlwaysUseRelativePath = false
RequestInitDocument = /var/cake_1.2.0.6311-beta/app/webroot/openx/www/delivery/startup.php
RequestInitFunction = requestStart
ForceServerNameToHeader = false
EnableKeepAlive = true
EnableEarlyFlush = true
ConnectionTimeoutSeconds = 120
# shutdown options
GracefulShutdownWait = 0 # in seconds
HarshShutdown = true
EvilShutdown = true
DanglingWait = 0
MaxPostSize = 8 # in MB
LibEventSyncSend = true
ResponseQueueCount = 0
DefaultCharsetName = UTF-8
APC {
EnableApc = true
TableType = concurrent
ExpireOnSets = true
}
}
但是,看起来它没有回答如何根据APC变量使用配置Hiphop - - 配置为作为一个具有多个线程的单个进程运行 要么 - 配置为使用共享内存运行APC。
参考https://github.com/petehunt/hiphop-php/blob/master/doc/runtime.memory_model。
答案 0 :(得分:1)
是的,这是线程安全的!
Apcu使用rwlock
来保证它的线程安全,你可以在源代码apcu/apc_cache.c
中找到它。