[Lua] 协程coroutine小结

coroutine Tutorial

摘自:http://lua-users.org/wiki/CoroutinesTutorial

什么是协程?

协程可以让我们“同时”执行多个任务。通过传递控制权到每个协程和等待当前协程完成(或让出控制权),我们可以重新进入到一个协程去继续它的任务,重复的进行这样的切换,协程就实现了多线程。

本质

  • 不并行
  • 是一种需要自己传递控制权的协作式多线程
  • 是在lua内实现的,并不是系统级别的线程
  • 相比线程的优点:不需要繁复的锁机制去保证线程安全,效率相对高
  • 可传递值

应用

  • 将异步回调改成同步写法
prod = coroutine.create(function ( a, b )
    local i = 1 
    while(true)do
        if i > 2000 then break end
        if i % 100 == 0 then
            coroutine.yield(i)
        end
        i = i + 1
    end
end)

customer = function (prod)
    local value,a = coroutine.resume(prod)
    print("customer",value,a)
    return value
end

coroutinue.resume(prod)
customer(prod)

lua copas库

一个用来实现异步server的库,值得一看~
http://keplerproject.github.io/copas/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值