【Lua】协程(Coroutine)

简介: 【Lua】协程(Coroutine)

从多线程(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))


image.png


从协程的角度看,在挂起期间发生的活动都发生在协程调用 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))


image.png

目录
相关文章
|
C# Python
[√]lua 协程
[√]lua 协程
98 1
|
7月前
|
存储 Linux 调度
协程(coroutine)的原理和使用
协程(coroutine)的原理和使用
|
9月前
|
PHP 调度 容器
Swoole 源码分析之 Coroutine 协程模块
协程又称轻量级线程,但与线程不同的是;协程是用户级线程,不需要操作系统参与。由用户显式控制,可以在需要的时候挂起、或恢复执行。
101 1
Swoole 源码分析之 Coroutine 协程模块
|
7月前
Lua语法(四)——协程
Lua语法(四)——协程
82 0
|
9月前
|
调度 C++ 开发者
C++一分钟之-认识协程(coroutine)
【6月更文挑战第30天】C++20引入的协程提供了一种轻量级的控制流抽象,便于异步编程,减少了对回调和状态机的依赖。协程包括使用`co_await`、`co_return`、`co_yield`的函数,以及协程柄和awaiter来控制执行。它们适合异步IO、生成器和轻量级任务调度。常见问题包括与线程混淆、不当使用`co_await`和资源泄漏。例如,斐波那契生成器协程展示了如何生成序列。正确理解和使用协程能简化异步代码,但需注意生命周期管理。
171 4
|
8月前
|
存储 调度 Python
异步编程概述在 Python中,`asyncio`库提供了对异步I/O、事件循环、协程(coroutine)和任务的支持。
异步编程概述在 Python中,`asyncio`库提供了对异步I/O、事件循环、协程(coroutine)和任务的支持。
|
9月前
|
图形学
【unity知识点】Unity 协程/携程Coroutine
【unity知识点】Unity 协程/携程Coroutine
549 0
|
10月前
|
调度 Python
什么是Python中的协程(Coroutine)?如何使用`async`和`await`进行协程编程?
什么是Python中的协程(Coroutine)?如何使用`async`和`await`进行协程编程?
123 0
|
10月前
|
API 调度 Python
Python 高级主题:解释 Python 中的协程(Coroutine)是什么?
Python 高级主题:解释 Python 中的协程(Coroutine)是什么?
77 1