Lua 协程(Coroutine)
协程(Coroutine)是一种 轻量级线程,允许程序在执行过程中 挂起(yield) 和 恢复(resume),实现 协作式多任务,而无需操作系统线程开销。
🧩 创建协程
-- 定义一个协程函数
local co = coroutine.create(function()
for i = 1, 3 do
print("协程运行:" .. i)
coroutine.yield() -- 挂起
end
end)
`
🔄 启动与恢复
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 传递数据:
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控制执行 - 支持挂起与恢复,实现协作式多任务
- 在游戏、异步处理和流式计算中非常实用
相关内容
- Lua 高级技巧与优化 学习 Lua 的高级编程技巧,包括性能优化、内存管理、闭包、尾递归优化和元表高级用法。
- Lua 与 C 的交互 学习如何在 Lua 中调用 C 函数、在 C 中嵌入 Lua,实现 Lua 与 C 的混合编程。
- 流程控制 学习 Lua 中的条件判断、循环语句与控制关键字的用法,包括 if、while、for 与 repeat until。
- 函数 学习 Lua 中函数的定义与调用方式,掌握参数传递、返回值、可变参数与匿名函数等概念。
- Lua 简介 了解 Lua 的起源、设计理念及应用场景,掌握 Lua 语言的核心特征与优势。
- 输入输出与文件操作 学习 Lua 的标准输入输出函数、文件读写操作以及字符串格式化与标准库使用。