当前位置: 首页 > news >正文

3.3 Lua代码中的协程

什么是协程?

协程是一种用户态的轻量级线程,由用户控制调度。与操作系统线程不同:

  • 协程由程序显式控制切换

  • 开销极小,可创建成千上万个

  • 协作式调度,不会出现竞态条件

常用的协程API

coroutine.close (co) --- 关闭协程,返回bool
coroutine.create (f) --- 创建协程,传入一个function,返回一个协程句柄
coroutine.isyieldable ([co]) --- 判断协程是否是 yield 状态
coroutine.resume (co [, val1, ...]) --- 将挂起态的协程重新激活
coroutine.running () --- 获取正在运行的协程
coroutine.status (co) --- 获取co句柄对应的协程的状态 {suspended(挂起), running(执行中), dead(结束)}
coroutine.wrap (f) --- 用function 创建一个新的协程
coroutine.yield (...) --- 挂起当前协程

示例代码:

function myprint(a,b)print("协程",a,b);print("协程状态:",coroutine.status(handle1));coroutine.yield(1,2);
endhandle1=coroutine.create(myprint);--创建协程print(coroutine.status(handle1));--获取当前协程的状态print(coroutine.resume(handle1,123,999));--开始执行该协程print(coroutine.status(handle1));coroutine.close(handle1);print(coroutine.status(handle1));print(coroutine.running());

运行结果:

suspended
协程	123	999
协程状态:	running
true	1	2
suspended
dead
thread: 00000000006f6ca8	true

双循环切换

function sleep(seconds)local start = os.time()while os.time() - start < seconds do-- 空循环,占用 CPUendendfunction myprint1()while true docoroutine.resume(handle2);print("func1--111");sleep(1);end
endfunction myprint2()while true docoroutine.yield();print("func2---222");sleep(1);endendhandle1=coroutine.create(myprint1);--创建协程
handle2=coroutine.create(myprint2);--创建协程coroutine.resume(handle1);

运行结果:

func1--111
func2---222
func1--111
func2---222
func1--111
func2---222
func1--111
func2---222

http://www.dtcms.com/a/549304.html

相关文章:

  • 11月即将召开-IEEE-机械制造方向会议 |2025年智能制造、机器人与自动化国际学术会议 (IMRA 2025)
  • 网页制作视频的网站建设天堂tv在线观看免费
  • Flink Keyed State 详解之六
  • Java static关键字深度解析
  • 对红色网站建设的建议个人logo创意设计免费
  • 沃航科技网站开发织梦网站打开慢
  • 自动驾驶中的传感器技术75——Navigation(12)
  • 基于Chrome140的TK账号自动化(关键词浏览)——运行脚本(三)
  • 多维尺度分析法(MDS)
  • 泰迪智能科技高校行业资源举例
  • 自动驾驶中的传感器技术73——Navigation(10)
  • 【设计模式】 组合模式(Composite)大白话讲解
  • 算力跃升!解析可嵌入整机的 6U VPX 异构高性能射频信号处理平台 AXW23
  • wordpress网站网速慢扶绥县住房和城乡建设局网站
  • 05-面试解析 Agent 理论 + 实践(Spring AI Alibaba)
  • 做外贸网站需要营业执照广州我网站制作
  • 万户网站协作管理系统网站用的空间
  • 【保姆级喂饭教程】Axure RP 11 下载、安装、汉化图文详细教程
  • 网站验证:确保网络安全与用户体验的关键
  • 【git】docker中无法进行git命令行补全
  • Kafka 概述与安装部署整理
  • 做ic芯片的要去哪个网站网站制作成app
  • 迭代器适配器全景透视:从 `map`/`filter` 到 `fold` 的零成本魔法
  • Drop Trait与资源清理机制:Rust内存安全的最后一道防线
  • 黑马JAVA+AI 加强07 Stream流-可变参数
  • Qt中的常用组件:QWidget篇
  • 天津做网站选津坤科技wordpress qqworld
  • 351-Spring AI Alibaba Dashscope 多模型示例
  • 东莞专业做网站的公司域名注册在那个网站好
  • 金仓数据库平替MongoDB:医共体数据互通的高效安全之道