Lua 学习笔记(一)

一般意义上的多线程程序中, 一个进程中存在多个线程, 分别处理各自的工作. 在当今多核心处理器非常普及的情况下, 一个多线程程序可以真正成为多线程应用程序了. 

不过Lua中的Coroutine机制, 却和一般意义上的多线程相距甚远. 

创建一个协同程序(以下简称协程)是非常简单的.

CODE:

co = coroutine.create(function() print("hello") end)
print(co)
print("Status:" .. coroutine.status(co))
coroutine.resume(co)
print("Status:" .. coroutine.status(co))

OUTPUT:

thread: 0304B778
Status:suspended
hello
Status:dead
 

status函数可以用来获取协程的状态, 从图中可以看出, 当一个协程被创建的时候, 他的状态是suspended. 当使用resume函数激活该协程以后, 协程开始执行函数中的代码, 并最终结束. 结束后, 协程的状态变为dead.

协程可以有四种状态: suspended, running, normal, dead.

利用yield函数, 我们可以让一个协程暂停.

function f()
 for i = 1,  10 do
  print(i)
  coroutine.yield()
 end
end
co = coroutine.create(f)
coroutine.resume(co) -->1
coroutine.resume(co) -->2
coroutine.resume(co) -->3

如果一个协程已经进入dead状态, 这时, 我们再次激活它, 将返回错误信息:

co = coroutine.create(function() print("hello") end)
coroutine.resume(co) -->hello
print(coroutine.status(co)) -->dead
print(coroutine.resume(co)) -->alse cannot resume dead coroutine

 

 

 

你可能感兴趣的:(多线程,lua)