协同程序(coroutine)简介
Lua 协同程序(coroutine)与线程比较类似:拥有独立的堆栈,独立的局部变量,独立的指令指针,同时又与其它协同程序共享全局变量和其它大部分东西。
线程和协同程序区别
1.线程可以同时运行,协同程序却需要彼此协作的运行。
2.在任一指定时刻只有一个协同程序在运行,并且这个正在运行的协同程序只有在明确的被要求挂起的时候才会被挂起。
协同程序有点类似与,在等待同一个线程锁的几个线程。
方法概览
方法 | 描述 |
coroutine.create(func) | 创建coroutine,该方法只创建,如需唤醒coroutine需配合resume方法; 入参:是协程运行的函数; 返回:成功返回coroutine。 |
coroutine.resume(co, val1, ...) | 唤醒coroutine,和create配合使用; 入参:可任意输入,但是第一个入参必须是coroutine.create()的返回值。 1.如果是第一次唤醒,其余入参作为协程运行函数的入参。多余的参数被舍弃。 2.如果是唤醒调用yield()挂起的协程,其他输入参数将作为yield()的返回值。 除第一个入参外,如果入参个数少于yield()返回值个数,则执行失败,如果多于yield()返回 值个数,则多余的参数被舍弃,执行成功; 返回:成功返回true与yield()的入参。失败返回错误提示。 |
coroutine.yield(val1, ...) | 挂起coroutine,和resume配合使用能有很多有用的效果; 入参:可以任意输入,输入的入参将作为resume的返回值; 返回:resume()的入参作。 |
coroutine.status(co) | 获取coroutine的状态; 入参:coroutine.create()的返回值; 返回:返回coroutine的状态有四种:dead,suspend,running,normal。 |
coroutine.wrap(func) | 创建coroutine,返回一个函数,一旦你调用这个函数,就进入coroutine,和cr |