Lua coroutine理解

(持续更新中.........)

Lua中的coroutine和go里面的goroutine,以及erlang中的spawn出一个新的进程的思想一致(erlang应该是他们的鼻祖)

coroutine中的coroutine.resume解释

函数原型:coroutine.resume(co, para1, para2, ...)

函数参数:

第一个参数co:coroutine.create的返回值,即一个thread对象;

第二个参数:coroutine中的主函数体执行需要的参数,是一个变长参数,可以传任意多个;

函数返回值:

如果程序运行没有任何错误的话,那么会返回true,true之后紧跟着的值是最近一次调用coroutine.yield时传入coroutine.yield的参数,可以有任意多个,

如果程序在运行中没有任何错误也没有遇到yield而正常结束,那么函数的返回值为true,后面跟上主函数的返回值(return后面的值)

如果有任何错误的话,就会返回false,后面紧跟上错误的信息

函数作用:

当第一次调用coroutine的resume方法时,coroutine从主函数的第一行开始执行,之后在coroutine开始运行后,它会一直运行到自身终止或者是coroutine的下一个yield函数


coroutine中的coroutine.yield解释:

函数原型:coroutine.yield(...)

函数参数:可变长参数

函数返回值:

返回最近一次调用coroutine.resume时传入的参数

函数作用:

挂起当前执行的协程,这个协程不能正在使用一个C函数、一个元表或者一个迭代器


lua的coroutine在执行coroutine.yield时的分析:

只要程序的执行流在遇到yield时,总是立马暂停,此时,coroutine的resume函数将yield的参数作为resume的返回值带出来;

当下一次执行resume的时候,执行体开始执行yield函数,其实就是对yield的函数调用进行求值,求值结果就是本次resume调用时的入参,这样yield就可以作为表达式将函数的求值结果赋给其他变量;

这也体现了resume和yield配合可以作为消息通信的通道的实质

消息传递的过程中,yield起到了关键作用,承上启下的作用。



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值