【发布时间】:2014-02-06 19:32:45
【问题描述】:
我很难理解 openresty(或 nginx)的并发模型。我阅读了Lua variable scope,它解释了变量的生命周期,但它没有说明对它们的并发访问。
语言很难解释,所以我试着用代码来解释。想象一下我有这个 Lua 模块:
local counter = {count = 0}
function counter.incr(amount)
counter.count = counter.count + (amount or 1)
end
return counter
然后我像这样在 openresty 中使用它:
server {
location /incr {
content_by_lua '
local counter = require 'counter'
counter.incr(1)
'
}
location /decr {
content_by_lua '
local counter = require 'counter'
counter.incr(-1)
'
}
location /count {
content_by_lua '
local counter = require 'counter'
ngx.write(counter.count)
'
}
}
我想了解并发模型以便回答这些问题:
- 如果我对
/incr进行了 10 次并发调用,然后我又调用了/count,我能否确定结果将是 10(我假设不是,但为什么)? - 如果我对
/incr进行10 次并发调用,同时对/decr进行另外10 次调用,我可以确定/count将返回0 吗? - 工人数量如何影响结果?
- 代码发生的阶段(即
init_by_lua而不是content_by_lua)如何影响结果?
【问题讨论】:
标签: concurrency nginx lua