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)) -- deadcoroutine.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:挂起状态,可resumerunning:正在运行normal:非主协程中调用其他协程dead:协程已结束
🧠 应用场景
- 游戏开发:任务、动画、AI 状态机
- 数据流处理:按需生成数据
- 异步 IO 模拟:协作式多任务处理
协程的优点是 轻量、灵活、可控,适合 Lua 脚本中需要多任务或延迟执行的场景。
🧠 小结
- 协程是 Lua 的轻量级线程
- 使用
create,resume,yield控制执行 - 支持挂起与恢复,实现协作式多任务
- 在游戏、异步处理和流式计算中非常实用