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/