重新看了下 coroutine.yield 这个 API,发现这个方法不需要依靠 coroutine.create。
因为 OpenResty 跑 content_by_lua 是在一个独立的 coroutine 里面跑,所以 coroutine.yield 也可以 yield 出当前的请求。
把日志级别调整到 debug 级别,然后压测下 openresty 程序,加了 coroutine.yield 的代码会产生如下日志:
2017/04/20 16:58:21 [debug] 51551#1025332: *190 lua resume returned 1
2017/04/20 16:58:21 [debug] 51551#1025332: *190 lua thread yielded
2017/04/20 16:58:21 [debug] 51551#1025332: *190 lua coroutine: yield
说明直接在 content_by_lua 里面 yield 应该是可行的。