Lua协程(一)

本文介绍了Lua协程的基本概念,包括其与线程的区别、状态管理(挂起态、运行态、死亡态)以及核心函数`coroutine.create`、`coroutine.resume`和`coroutine.yield`的使用。通过实例解析了协程的执行流程,展示了如何创建、启动、挂起和恢复协程,以及协程终止后的资源释放。
摘要由CSDN通过智能技术生成

Lua协程(一)

本文主要涉及Lua协程是如何工作的,并不涉及Lua协程的工作原理。

本人理解能力有限,一直没有弄懂Lua协程是如何工作的。今天,仔细看看了帮助文档,有些感觉,记录在此。

先来看看《Lua程序设计》中是如何讲解Lua协程的:

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

lua通过table提供了所有的协同函数,create函数创建一个新的协同程序,create只有一个参数;协同程序将要运行的代码封装成函数,返回值为thread类型的值表示创建了一个新的协同程序。协同有三个状态:挂起态(suspended)、运行态(running)、死亡(dead)。注意的是:lua提供的协同是一种不对称的协同,就是说挂起一个正在执行的协同的函数与使一个被挂起的协同再次执行的函数是不同的。

在来看官方参考手册给的例子:

function foo (a)
   print("foo", a)
   return coroutine.yield(2*a)
end

co = coroutine.create(function (a,b)
   print("co-body", a, b)
   local r = foo(a+
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值