教程 lua tutorial

Lua 协程(Coroutine)

协程(Coroutine)是一种 轻量级线程,允许程序在执行过程中 挂起(yield) 和 恢复(resume),实现 协作式多任务,而无需操作系统线程开销。

🧩 创建协程

lua
-- 定义一个协程函数
local co = coroutine.create(function()
  for i = 1, 3 do
    print("协程运行:" .. i)
    coroutine.yield()  -- 挂起
  end
end)

`

🔄 启动与恢复

lua
print(coroutine.status(co))  -- suspended

coroutine.resume(co)  -- 输出:协程运行:1
coroutine.resume(co)  -- 输出:协程运行:2
coroutine.resume(co)  -- 输出:协程运行:3

print(coroutine.status(co))  -- dead
  • coroutine.create(func):创建协程
  • coroutine.resume(co, ...):恢复协程执行
  • coroutine.yield(...):挂起协程并可返回值
  • coroutine.status(co):查询协程状态,可能值为 "suspended"、"running"、"dead"

🧩 协程通信

协程之间可以通过 yield 和 resume 传递数据:

lua
local co = coroutine.create(function()
  local x = coroutine.yield("第一次挂起")
  print("收到 x =", x)
end)

local ok, msg = coroutine.resume(co)
print(msg)  -- 输出:第一次挂起

coroutine.resume(co, 42)  -- 输出:收到 x = 42

🔄 状态管理

协程状态说明:

  • suspended:挂起状态,可 resume
  • running:正在运行
  • normal:非主协程中调用其他协程
  • dead:协程已结束

🧠 应用场景

  • 游戏开发:任务、动画、AI 状态机
  • 数据流处理:按需生成数据
  • 异步 IO 模拟:协作式多任务处理

协程的优点是 轻量、灵活、可控,适合 Lua 脚本中需要多任务或延迟执行的场景。

🧠 小结

  • 协程是 Lua 的轻量级线程
  • 使用 create, resume, yield 控制执行
  • 支持挂起与恢复,实现协作式多任务
  • 在游戏、异步处理和流式计算中非常实用