[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/

阅读更多
个人分类: lua
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭