美文网首页js css html
545.【Lua】协程(Coroutine)

545.【Lua】协程(Coroutine)

作者: 七镜 | 来源:发表于2023-01-09 22:28 被阅读0次

从多线程(multithreading) 的角度看,协程(coroutine)与线程(thread)类似:协程是一系列的可执行语句,拥有自己的栈、局部变量和指令指针,同时协程又与其他协程共享了全局变量和其他几乎一切资源。线程与协程的主要区别在于,一个多线程程序可以并行运行多个线程,而协程却需要彼此协作地运行,即在任意时刻只能有一个协程运行,且只有当正在运行的协程显示地要求被挂起(suspend)时其执行才会暂停。

协程的真正强大之处在于函数 yeild,该函数可以让一个运行中的协程挂起自己,然后在后续恢复运行,例如:

co = coroutine.create(function ()
          for i = 1, 10 do
            print("co", i)
            coroutine.yield()
          end
        end)
  • 其中,协程进行了一个循环,在循环中输出数字并在每次打印后挂起。当唤醒协程后,他就会开始执行直到遇到第一个 yield:
coroutine.resume(co)
  • 此时,如果我们查看协程状态,会发现协程处于挂起状态,因此可以再次恢复运行:
print(coroutine.status(co))

从协程的角度看,在挂起期间发生的活动都发生在协程调用 yield 期间。当我们唤醒协程时,函数 yield 才会最终返回,然后协程会继续执行直到写一个 yield 或执行结束:

coroutine.resume(co)
coroutine.resume(co)
coroutine.resume(co)
coroutine.resume(co)
coroutine.resume(co)
coroutine.resume(co)
coroutine.resume(co)
coroutine.resume(co)
coroutine.resume(co)
coroutine.resume(co)
coroutine.resume(co) -- 不输出任何数据
  • 在最后一次调用 resume 时,协程体执行完毕并返回,不输出任何数据。如果我们视图再次唤醒它,函数 resume 将返回 false 及一条错误信息:
print(coroutine.resume(co))

相关文章

  • Python协程、yield、yield from

    前言 协程,又称微线程,纤程。英文名Coroutine。最近几年才在某些语言(如Lua)中得到广泛应用! 协程的特...

  • [xlua]探索笔记之协程

    在c#里的协程一般是长这个样子的 xlua里也有对协程的支持。 这里的cs_coroutine 也是一个lua脚本...

  • lua学习之协程

    lua中的另一个高级功能是coroutine(协程),协同式多线程的意思,不同于线程和进程,协程仅在显示的调用一个...

  • python异步协程(aiohttp,asyncio)

    python异步协程 环境:python3.7.0 协程 协程,英文叫做 Coroutine,又称微线程,纤程,协...

  • JS 生成器 vs. Lua 协程

    “协程(coroutine)”于我而言还是比较新的概念,Lua 也是刚接触不久。不过碰巧这段时间我又在看 ES6 ...

  • Kotlin协程探索(一) (Coroutine)

    Kotlin协程探索 (一)(Coroutine) PS:以下协程都特指Kotlin协程;且期望大家大概知道协程的...

  • 我的Kotlin 学习之路(六)Kotlin之coroutine

    Coroutine -> 协程不同于线程,协程不占用CPU,它只占用内存来处理耗时操作。Coroutine的原理有...

  • Kotlin协程

    协程(Coroutine) 协程引入 异步加载图片 普通代码:val view = ...loadImageAsy...

  • Python 协程

    仅供学习,转载请注明出处 协程 协程,又称微线程,纤程。英文名Coroutine。 协程是啥 协程是python个...

  • Python并发编程——协程

    摘要:Python,协程,gevent 协程基本概念 协程,又称微线程,纤程。英文名Coroutine,是Pyth...

网友评论

    本文标题:545.【Lua】协程(Coroutine)

    本文链接:https://www.haomeiwen.com/subject/wigucdtx.html