返回首页 - Notes - 2011

Lua 协同程序


协同程序与线程类似,是一条拥有自己独立的栈、局部变量和指令指针的执行序列,同时又与其他协同程序共享全局变量和其他大部分东西

区别在于,多线程程序可以同时运行几个线程,而协同程序却需要彼此协作地运行

Lua 将所有关于协同程序的函数放在一个名为 coroutinetable

coroutine.create():创建新的协同程序,参数为一个函数,亦即该协同程序需要执行的内容,create() 会返回一个 thread 类型的值

一个协同程序的四种状态:

  1. 正常(normal
  2. 运行(running
  3. 挂起(suspended
  4. 死亡(dead

新创建的协同程序会处于挂起状态,也就是说协同程序不会在创建时自动执行

coroutine.status():检查协同程序的状态

coroutine.resume():启动或重启某个协同程序

coroutine.yield():把一个运行中的协同程序挂起

resume 是在保护模式中运行的,如果协同程序执行中发生错误,Lua 是不会显示错误消息的,而是将执行权返回给 resume 调用

当一个协同程序 A 唤醒另一个协同程序 B 时,协同程序 A 所处的特殊状态称之为“正常”状态


date : 2011-10-13