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
]]
    

猜你喜欢

转载自blog.csdn.net/weixin_35338800/article/details/83053111