8.lua学习笔记:协程

1.协程基础:
    lua把所有协程相关的函数都放在coroutine的table中,create接受一个函数参数用于创建协程,这个参数就是协程的执行过程,
每个协程有四种状态:suspended(挂起),running(运行),dead(死亡,执行完),normal(正常)
    co = coroutine.create( function () print("hello") end)
    print( coroutine.status(co) )        ------suspended(刚创建的协程处于挂起状态,不会自动执行)
    coroutine.resume(co)                  ------hello(唤醒后执行打印语句)
    print( coroutine.status(co) )        ------dead(执行完了,协程结束)

协程的真正威力在于yield的使用,通过resume和yield的交互,可以在不同的协程间传递数据:
    function  test( a, b )
            res = coroutine.yield( a+b,  a - b )
            print("res:" .. res)
    end
    
    co = coroutine.create(test)
    print( coroutine.resume(co , 12, 5) )  ---------true      17        7 
     print( coroutine.resume(co , 12, 5) )  ---------res: 12       /n     true  ( 此处res:12是协程打印的,而True是当前进程打印的
从上面可以看出, 协程每次唤醒后执行到yield,yield语句执行到抛出结果后挂起,等待下次唤醒,下次唤醒,从yield处接收信息开始;
首次resume传入的参数是传给协程住函数的,即test;如果协程函数有return语句,则最后一次resume将会收到协程return的结果

协程A唤醒协程B,此时,协程A既不是running状态,也不是dead状态,而是normal状态; yield能传出多个结果,也能接收多个值


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值