news 2026/4/3 14:25:06

Lua 的 Coroutine(协程)模块

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Lua 的 Coroutine(协程)模块

基本概念

Lua 的 Coroutine(协程)是一种轻量级的线程,它允许程序在单个线程中实现多个执行流的协作式调度。与操作系统线程不同,协程是完全由用户控制的,在用户态进行切换,不需要内核参与。

核心功能

创建协程

co=coroutine.create(function()print("协程开始执行")end)

启动/恢复协程

coroutine.resume(co)-- 输出:"协程开始执行"

挂起协程

co=coroutine.create(function()print("第一步")coroutine.yield()print("第二步")end)coroutine.resume(co)-- 输出:"第一步"coroutine.resume(co)-- 输出:"第二步"

状态管理

协程有以下几种状态:

  • suspended(挂起):刚创建或调用coroutine.yield后的状态
  • running(运行):正在执行的状态
  • dead(结束):函数执行完毕的状态

可以通过coroutine.status(co)查询协程状态。

数据交换

协程支持在coroutine.resumecoroutine.yield之间传递数据:

co=coroutine.create(function(x)print("收到:"..x)localy=coroutine.yield("返回1")print("收到:"..y)return"返回2"end)print(coroutine.resume(co,"输入1"))-- 输出:"收到:输入1" 和 "true 返回1"print(coroutine.resume(co,"输入2"))-- 输出:"收到:输入2" 和 "true 返回2"

应用场景

  1. 迭代器实现:可以用协程实现复杂的迭代逻辑
  2. 状态机:将状态转换逻辑封装在协程中
  3. 协作式多任务:在单线程中模拟多任务处理
  4. 游戏开发:处理角色AI、动画序列等
  5. 网络编程:实现非阻塞IO的协程调度

示例:生产者-消费者模式

functionproducer()returncoroutine.create(function()whiletruedolocalx=io.read()coroutine.yield(x)endend)endfunctionconsumer(prod)whiletruedolocalstatus,value=coroutine.resume(prod)ifnotstatusthenbreakendprint("消费:"..value)endendconsumer(producer())

注意事项

  1. 协程不是抢占式的,需要显式调用coroutine.yield让出执行权
  2. 协程的栈空间有限,深度递归可能导致栈溢出
  3. 协程间的数据共享需要注意同步问题
  4. 错误处理需要通过coroutine.resume的返回值判断

扩展阅读

Lua 5.3+ 版本对协程做了优化,性能更好。在 LuaJIT 中协程的执行效率更高,适合高性能场景。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/25 9:53:55

Mac 真人手势识别切水果游戏

1. 环境mac python102. 代码import cv2 import mediapipe as mp import time import numpy as np import random import math# 初始化MediaPipe解决方案 mp_hands mp.solutions.hands mp_face_mesh mp.solutions.face_mesh mp_draw mp.solutions.drawing_utils# 自定义绘制样…

作者头像 李华
网站建设 2026/4/3 5:18:09

北京历年住房公积金月缴存额上限及同比增长率表

住房公积金年度执行时间范围月缴存额上限(元)同比增长率(%)备注说明2013-3760-无前期数据20142014.07.01-2015.06.30417010.90较 2013 年上调20152015.07.01-2016.06.30465411.61-20162016.07.01-2017.06.3051029.63-20172017.07.…

作者头像 李华
网站建设 2026/3/17 7:34:45

【计算机网络笔记】第五章 网络层的控制平面

一、路由协议路由协议的目标:路由协议的核心目标是确定从发送主机到接收主机的最优路径(即路由)。路径指数据包从初始源主机到目标主机时,需经过的路由器序列。最优路径需满足成本最低、传输速度最快、网络拥塞最少等条件。路由算…

作者头像 李华
网站建设 2026/3/30 17:58:19

Scarab模组管理器:空洞骑士玩家的终极安装解决方案

Scarab模组管理器:空洞骑士玩家的终极安装解决方案 【免费下载链接】Scarab An installer for Hollow Knight mods written in Avalonia. 项目地址: https://gitcode.com/gh_mirrors/sc/Scarab Scarab是一款专为《空洞骑士》量身打造的跨平台模组管理工具&am…

作者头像 李华
网站建设 2026/3/30 5:07:46

SolidWorks零件连接方式介绍

在SolidWorks中,零件的连接方式是通过装配体环境实现的,其核心是通过配合关系(Mate)、高级连接(Advanced Mates)或特定功能模块(如焊接、螺栓连接、运动仿真中的约束)来定义零件间的…

作者头像 李华
网站建设 2026/4/2 6:25:34

Flutter与DevEco Studio结合开发简单项目实战指南

随着跨平台开发技术的普及和HarmonyOS生态的崛起,将Flutter的跨平台优势与DevEco Studio的HarmonyOS开发能力相结合,成为不少开发者的需求。本文将以一个简单的“待办事项列表”项目为例,详细讲解如何使用Flutter与DevEco Studio协同开发&…

作者头像 李华