主题
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
控制执行 - 支持挂起与恢复,实现协作式多任务
- 在游戏、异步处理和流式计算中非常实用