Lua 协程

多线程 就像是实时对战游戏,同一时间两名玩家可以同时运动。协程 就像是棋牌游戏,表面上是两个同时在玩,实际上只是两个人交替执行,同一时间只有一名玩家可以活动。所以协程不会存在死锁等多线程特有的问题。协程可以通过顺序流的代码进行模拟,就像自己跟自己下棋,先走一步,然后坐到对面走一步,再坐回来…多线程如果底层不支持的话是没法模拟的。所以协程更像是一种高级的语法糖,把一个人的步骤分到两个人身上执行,这样使代码看起来更加条理。

-- 创建 coroutine 
co2 = coroutine.create(
    function()
        for i=1,3 do
            ret = coroutine.yield() -- 暂停
            print(ret)
        end
    end
)
 
coroutine.resume(co2)
coroutine.resume(co2, 11) --11
coroutine.resume(co2, 22) --22

-- 查看状态
print(coroutine.status(co2)) 
-- 查看线程号
print(coroutine.running()) 


-- 执行顺序
co = coroutine.wrap(
    function(i)
        print(i); --2
        a = coroutine.yield() --3
        print(a); --5
        b = coroutine.yield() --6
        print(b);
    end
)
 
co('a') --1
co('b') --4
co('c') --7

--参数传递过程
co = coroutine.create(
    function()    
        for i=1,3 do
            y = coroutine.yield("让出 "..i)--2 6 10 
            print(y)-- 5 9
        end
    end
)


for i=1,3 do
    _, r = coroutine.resume(co, "接管 "..i)--1 4 8
    print(r) --3 7 11
end 

--[[
让出1
接管2
让出2
接管3
让出3
]]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值