在 2014年5月15日星期四UTC+8上午2时58分57秒,agentzh写道:
Hello!
2014-05-14 9:17 GMT-07:00 小冶:
> 我试了一下,发现前者好像与当前请求共用一个ngx.ctx,后者则不是。
后者也是。不是就是 bug 了。
再次试了,发现区别了:
ngx.ctx.test = 1
--1、ngx.thread.spawn(function()
--2、co_run(function()
while true do
print("normal", coroutine.running(), ngx.ctx.test)
ngx.sleep(1)
end
end)
用2创建的coroutine,控制完全不会返回到主协程,即使调了ngx.sleep挂起,但这个挂起似乎并不是yield回处理请求的协程。
用1创建的coroutine,控制是会返回主协程的,也就是后面的代码会继续跑,而新创建的协程也在跑,两者已经没有从属关系了。
前面提到2感觉似乎没有共享ngx.ctx,恰是因为后续代码没有跑,所以没有在ngx.ctx里读到应有的值而误认为的。