skynet服务的执行顺序问题

执行顺序问题

skynet单个服务是线程安全的,但是服务的执行顺序不是按照代码逻辑的顺序执行的(注意:单线程也不能保证)

假设有这么一个逻辑 :

A.run() call B.do_it()

B.do_it() call C.create()

D call C.do_it()

理想的执行顺序是 A B C D

但是 A.run() 的 call 会导致协程挂起,然后去执行了 D 的 call,但这时候 C.create() 还没有创建,就会执行错误。

注意,单线程也不能保证顺序执行,协成可能挂起让另一个协成执行。

如何保证服务顺序执行

可以使用 skynet.queue

最后更新于