js css html

545.【Lua】协程(Coroutine)

2023-01-09  本文已影响0人  七镜

从多线程(multithreading) 的角度看,协程(coroutine)与线程(thread)类似:协程是一系列的可执行语句,拥有自己的栈、局部变量和指令指针,同时协程又与其他协程共享了全局变量和其他几乎一切资源。线程与协程的主要区别在于,一个多线程程序可以并行运行多个线程,而协程却需要彼此协作地运行,即在任意时刻只能有一个协程运行,且只有当正在运行的协程显示地要求被挂起(suspend)时其执行才会暂停。

协程的真正强大之处在于函数 yeild,该函数可以让一个运行中的协程挂起自己,然后在后续恢复运行,例如:

co = coroutine.create(function ()
          for i = 1, 10 do
            print("co", i)
            coroutine.yield()
          end
        end)
coroutine.resume(co)
print(coroutine.status(co))

从协程的角度看,在挂起期间发生的活动都发生在协程调用 yield 期间。当我们唤醒协程时,函数 yield 才会最终返回,然后协程会继续执行直到写一个 yield 或执行结束:

coroutine.resume(co)
coroutine.resume(co)
coroutine.resume(co)
coroutine.resume(co)
coroutine.resume(co)
coroutine.resume(co)
coroutine.resume(co)
coroutine.resume(co)
coroutine.resume(co)
coroutine.resume(co)
coroutine.resume(co) -- 不输出任何数据
print(coroutine.resume(co))
上一篇下一篇

猜你喜欢

热点阅读