查看: 32|回复: 0

Lua 高级教程——协程(Coroutine):轻量级并发

[复制链接]

48

主题

75

回帖

1991

积分

金牌会员

积分
1991
QQ
发表于 2026-5-27 14:17:16 | 显示全部楼层 |阅读模式
协程是用户态轻量级线程,可暂停 / 恢复,无锁、开销极低,适合异步、迭代、状态机场景。

1. 基础 API
  • coroutine.create(f):创建协程(挂起)
  • coroutine.resume(co, ...):恢复协程,传参
  • coroutine.yield(...):暂停协程,返回值
  • coroutine.status(co):状态(suspended/running/dead)

2. 示例:生产者 - 消费者
local producer = coroutine.create(function()
  for i=1,3 do
    print("生产:", i)
    coroutine.yield(i)  -- 暂停,返回 i
  end
end)

-- 消费者
while true do
  local ok, val = coroutine.resume(producer)
  if not ok or coroutine.status(producer)=="dead" then break end
  print("消费:", val)
end
输出:
生产: 1
消费: 1
生产: 2
消费: 2
生产: 3
消费: 3
3. 协程 vs 线程
  • 协程:单线程内切换,无竞争、无需锁,开销小。
  • 线程:内核调度,多线程并行,有竞争、开销大。




您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表