Lua协程(coroutine)的基本知识
来源:互联网 发布:2017网络手游排行榜 编辑:程序博客网 时间:2024/05/17 01:06
有一个概念叫做coroutine, 也就是协程。
协程究竟是什么呢,
正式一点的说法: wiki : 协程是一种程序组件,是由子例程(过程、函数、例程、方法、子程序)的概念泛化而来的,
子例程只有一个入口点且只返回一次,而协程允许多个入口点,可以在指定位置挂起和恢复执行。
Marlin: 协程的本地数据在后续调用中始终保持。
协程在控制离开时暂停执行,当控制再次进入时只能从离开的位置继续执行
通俗一点的理解: 协程在执行时,可以被挂起。在某个时间点被唤醒继续执行,其上下文保持不变。
我们简单看一个例子:
local co = coroutine.create(function() for i = 2016, 2017 do print(i) coroutine.yield() endend)for k = 1, 2 do coroutine.resume(co)end输出:20162017
解释一下:
coroutine.create
creat函数创建一个新的coroutine,定义了协程内的任务。可以看成是coroutine类创建了一个对象co
coroutine.resume
第一次调用, 从coroutine对象主函数第一行开始执行,到函数结束或者下一个yield函数停止。
之后的调用,从上次yield函数处开始, 运行到自身终止或者是coroutine的下一个yield函数。
coroutine.yield
挂起当前的执行的coroutine实例。
所以上面的程序运行的过程是这样的:
coroutine.create创建一个叫co的实例。
在for循环里, 第一次coroutine.resume(co),
执行了 i = 2016, print(i) coroutine.yield(),
第二次 coroutine.resume(co),
执行了 1 = 2017, print(i) coroutine.yield(),
所以如果协程里的方法改成
function() for i = 2016, 2017 do print(i) coroutine.yield() print(i) endend输出将为:201620162017
Lua协程是非对称的,因为程序控制权经由传递了。
lua的resume-yield可以互相交换数据。
最典型的Lua协程示例是生产者-消费者问题。
其他深入的用法以后再整理。
如有错误,欢迎指出。
可以在下方留言, 或加我QQ:812123870,
或者发邮件:dxmdxm1992@gmail.com
- Lua协程(coroutine)的基本知识
- lua的coroutine
- 理解Lua的Coroutine
- Lua 协程 coroutine
- lua协程coroutine
- 一个Lua coroutine的例子
- Lua Coroutine 的简单使用
- Lua基础coroutine(协程)
- Lua的多任务机制——协程(coroutine)
- Lua的多任务机制——协程(coroutine)
- Lua的多任务机制——协程(coroutine)
- Lua的多任务机制——协程(coroutine)
- Lua的多任务机制——协程(coroutine)
- LUA coroutine
- 【Lua】coroutine
- lua coroutine
- lua coroutine
- 【深入Lua】理解Lua中最强大的特性-coroutine(协程)
- mysql事务隔离级别 脏读,不可重复读,幻象读
- 【5】-阿里面试题android网络图片加载优化
- C++实验4-项目6输出星号图
- linux 常用命令
- opencv 人脸识别 (一)训练样本的处理
- Lua协程(coroutine)的基本知识
- OpenStack基础知识(—)
- opencv 人脸识别 (二)训练和识别
- MVC源代码学习实现部分解耦
- adb logcat 最详细说明
- Installing R on SUSE - Download for later installation
- 数据结构之算法特性及分类
- 深入理解Java中的IO
- CEdit控件的回车事件