PHP.net manual关于线程安全没有提及。apc_store()线程安全吗?
我们使用nginx服务器运行Hiphop PHP。一台服务器每天接收3千万个订单的请求。
团队成员说他们以前在观察apc_store()时遇到了问题,当他们用它向系统添加一些跨请求的值时。由于多线程正在运行,由nginx启动,似乎有些值正在丢失,因为多个线程同时引用了存储在缓存中的相同值并尝试更新它们。因此,他们在这些情况下切换到apc_inc()。
我的观察
- 我没有找到在价值的任何差异是由于使用这些功能。
- 这些值似乎与nginx访问日志文件中相同时间段内的日志数量相符。
这让我相信两者都是线程安全的。如果我错了,请纠正我。
更新
下面是一些可能相关的部分从/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
}
}
但是,看起来并不像它回答Hiphop的是如何在配置方面的APC变量用法 - - 配置为作为一个具有多个线程的单个进程运行 或 - 配置为使用共享内存运行APC。
参考https://github.com/petehunt/hiphop-php/blob/master/doc/runtime.memory_model。
https://github.com/petehunt/hiphop-php/blob/master/doc/runtime.memory_model有帮助吗? –
@NigelRen添加了更新。请看看你能否帮忙。 –