协程和多线程下的线程类似:有自己的堆栈,自己的局部变量,有自己的指令指针,但是和其他协程程序共享全局变量等信息。线程和协程的主要不同在于:多处理器的情况下,概念上来说多线程是同时运行多个线程,而协程是通过协作来完成,任何时刻只有一个协程程序在运行。并且这个在运行的协程只有明确被要求挂起时才会被挂起

你可以使用coroutine.create来创建协程:
co = coroutine.create(function ()
print("hi")
end)
协程有三种状态:挂起,运行,停止。创建后是挂起状态,即不自动运行。status函数可以查看当前状态。协程真正强大的地方在于他可以通过yield函数将一段正在运行的代码挂起。
lua的resume-yield可以互相交换数据
如果没有对应的yield,传递给resume的额外参数将作为参数传递给协程主函数:
co = coroutine.create(function (a, b, c)
print("co", a, b, c)
end)
coroutine.resume(co, 1, 2, 3)
如果没有错误的话,resume将返回true和yield的参数:
co = coroutine.create(function (a, b)
coroutine.yield(a+b, a-b)
end)
print(coroutine.resume(co, 3, 8))
同样地,yield也将返回由对应的resume传递而来的参数:
co = coroutine.create (function ()
print("co", coroutine.yield())
end)
coroutine.resume(co)
coroutine.resume(co, 4, 5)
最后,协程主函数返回值将作为与之对应的resume的返回值(第一个参数是true)。
co = coroutine.create(function ()
return 6, 7
end)
print(coroutine.resume(co)) 
(完)

明明白白lua的协程(coroutine)相关推荐

  1. 深入理解lua的协程coroutine

    1. 概述 lua协程和多线程 相同之处:拥有自己独立的桟.局部变量和PC计数器,同时又与其他协程共享全局变量和其他大部分东西 不同之处:一个多线程程序可以同时运行几个线程(并发执行.抢占),而协程却 ...

  2. Lua协程Coroutine是什么

    Lua协程Coroutine是什么 协程和线程不同: 同一时刻,一个多线程程序可以用多个线程同时执行:而协程只能有一个在执行 多线程是抢占式的:而协程是非抢占式的,只有协程显示被挂起,才会被挂起 协程 ...

  3. lua协程 unity_unity协程coroutine浅析

    一.序言 在unity的游戏开发中,对于异步操作,有一个避免不了的操作: 协程,以前一直理解的懵懵懂懂,最近认真充电了一下,通过前辈的文章大体理解了一下,在这儿抛砖引玉写一些个人理解.当然首先给出几篇 ...

  4. LUA 协程 Coroutine

    协程 Coroutine 协程(coroutine)并不是 Lua 独有的概念,如果让我用一句话概括,那么大概就是:一种能够在运行途中主动中断,并且能够从中断处恢复运行的特殊函数.(嗯,其实不是函数. ...

  5. Lua:协程,coroutine.create,coroutine.resume, coroutine.yield

    http://cloudwu.github.io/lua53doc/manual.html#2.6 Lua 支持协程,也叫 协同式多线程. 一个协程在 Lua 中代表了一段独立的执行线程. 然而,与多 ...

  6. Unity 协程Coroutine综合测试

    Unity 协程Coroutine综合测试 1 using UnityEngine; 2 using System.Collections; 3 using System.Text; 4 5 publ ...

  7. lua学习01:c调用lua、lua调用c、lua的协程、lua的常见API、lua读取配置文件总结

    文章目录 1.c通过虚拟机和虚拟栈调用lua test-vm.c test-vm.lua 打印效果 2.lua通过虚拟机和虚拟栈调用c lua-tbl.c test-tbl.lua 3.lua的协程 ...

  8. 并发编程协程(Coroutine)之Gevent

    并发编程协程之Gevent Gevent官网文档地址:http://www.gevent.org/contents.html 基本概念 我们通常所说的协程Coroutine其实是corporate r ...

  9. c++ 协程_理解Python协程(Coroutine)

    由于GIL的存在,导致Python多线程性能甚至比单线程更糟. GIL: 全局解释器锁(英语:Global Interpreter Lock,缩写GIL),是计算机程序设计语言解释器用于同步线程的一种 ...

最新文章

  1. 【Cocos2d-X(2.x) 游戏开发系列之三】最新版本cocos2d-2.0-x-2.0.2使用资源加载策略
  2. 《算法竞赛入门经典》第一章1.5
  3. Javascript基础学习20问(二)
  4. LightOJ - 1027 A Dangerous Maze —— 期望
  5. 为什么大厂都在造车?原因找到了
  6. datatables使用封装
  7. 如何针对数据进行分析
  8. CSS-----盒子模型
  9. 2020年下半年系统集成项目管理工程师上午试题解析(三)
  10. 火狐浏览器安装插件“组件未验证无法安装”问题解决
  11. 设计模式——单例模式八种方式实现与分析(附代码示例)
  12. CheckboxPreference 改造
  13. SolidWorks二次开发-工程图-预定义视图
  14. capslock键英语怎么读_capslock怎么读
  15. 总结:硬盘随机读写与顺序读写的性能差异
  16. web前端---css基础
  17. 关于stable diffusion的embedding训练的一篇随笔
  18. 别用微信文件传输助手了,这6款在线工具真香
  19. matplotlib绘制三维图
  20. 打开Windows任务管理器的七种方法

热门文章

  1. 四种主要网络IO虚拟化模型
  2. 《Precise and realistic grasping and manipulation in Virtual Reality without force feedback》论文解读
  3. Javascript 计算请假天数
  4. MySQL-视图-触发器-事务-存储过程-函数-流程控制-索引与慢查询优化-06
  5. xshell4 设置自动记录日志
  6. RT-Thread:GD32E103 移植USB HOST
  7. Matlab数值分析编程:牛顿下山法解方程
  8. Xshell6官网个人免费版下载
  9. CISP查询具体步骤
  10. 什么是测评认证 转自藏锋者