首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏Unity3d程序开发

    Lua:协程,coroutine.create,coroutine.resume, coroutine.yield

    第一次调用 coroutine.resume 时,第一个参数应传入 coroutine.create 返回的线程对象,然后协程从其主函数的第一行开始执行。 传递给该函数的任何参数均当作 coroutine.resume 的额外参数。 coroutine.wrap 返回 coroutine.resume 的所有返回值,除了第一个返回值(布尔型的错误码)。 和 coroutine.resume 不同, coroutine.wrap 不会捕获错误; 而是将任何错误都传播给调用者。 coroutine.yield(2*a) 返回了true,和传入coroutine.yield里面的值且执行到yield挂起 在协程让出的情况下, coroutine.resume 也会返回 true 此时,此前让出点处对 coroutine.yield 的调用 会返回,返回值为传给 coroutine.resume 的第一个参数之外的其他参数,第一个参数是co,相当于把 r 是 coroutine.yield

    50530编辑于 2023-08-24
  • coroutine

    lualocal co = coroutine.create(function() print("Coroutine started") coroutine.yield("yielded a value") print("Coroutine resumed") end)启动和恢复协同程序: 使用 coroutine.resume() 启动或恢复一个协同程序的执行。 当协同程序挂起时,coroutine.resume() 会恢复它的执行。 lua-- 继续从上次挂起的地方执行 local status, result = coroutine.resume(co) print(result) -- 输出 "Coroutine resumed local processor = coroutine.create(taskProcessor)-- 启动协同程序,直到第一次挂起assert(coroutine.resume(processor))

    20900编辑于 2024-12-10
  • coroutine

    基本语法和方法coroutine.create()创建一个新的协同程序对象,并返回这个对象。这个对象是一个闭包,当与 coroutine.resume 配合使用时,可以唤醒指定的函数调用。 coroutine.yield()挂起当前协同程序,将控制权交还给调用者。这个函数可以带参数,这些参数将作为 coroutine.resume 的返回值。 参数:任意数量的参数,这些参数将被返回给 coroutine.resume 的调用者。coroutine.status()查看协同程序的状态。 () for i = 1, 3 do print("Coroutine:", i) coroutine.yield(i) -- 挂起协同程序,并返回 i endend -- 创建协同程序local co = coroutine.wrap(myCoroutine)-- 启动和恢复协同程序co() -- 启动协同程序,输出 "Coroutine: 1"print(co)

    18600编辑于 2024-12-11
  • 来自专栏刘晓杰

    Coroutine(协程)(二)

    如果使用一些消耗 CPU 资源的阻塞代码计算数字(每次计算需要 100 毫秒)那么我们可以使用 Sequence 来表示数字:

    74610发布于 2021-03-04
  • 来自专栏owent

    C++20 Coroutine

    而协程函数一切的核心都在于上面的 COROUTINE_OBJECT 类型。 里面有一些规范, co_yield 和 co_return 涉及 COROUTINE_OBJECT 里的 COROUTINE_OBJECT::promise_type 类型。 比如: struct coroutine_task { struct promise_type { coroutine_task get_return_object() { { struct promise_type { coroutine_task get_return_object() { return coroutine_task 这个关键字要求实现 COROUTINE_OBJECT::promise_type::return_value(参数) 或者 COROUTINE_OBJECT::promise_type::return_void

    3.2K30发布于 2020-01-02
  • 来自专栏Python程序员杂谈

    Goroutine VS Coroutine

    下面来通过两段代码来对比Python的Coroutine(协程)和Go的Goroutine。 先来看由yield实现的Coroutine: .. code:: python import random def subtask(): i = -1 while True:

    1.1K20发布于 2019-03-01
  • 来自专栏vanguard

    coroutine 协程

    The async def type of coroutine was added in Python 3.5, and is recommended if there is no need to support 于是出现了协程(Coroutine)这么个东西。 协程/微线程/纤程/Coroutine作用是在执行函数A时,可以随时中断,去执行函数B,然后中断继续执行函数A(可以自由切换)。

    56930发布于 2020-03-20
  • 来自专栏owent

    C++20 Coroutine

    而协程函数一切的核心都在于上面的 COROUTINE_OBJECT 类型。 里面有一些规范, co_yield 和 co_return 涉及 COROUTINE_OBJECT 里的 COROUTINE_OBJECT::promise_type 类型。 比如: struct coroutine_task { struct promise_type { coroutine_task get_return_object() { { struct promise_type { coroutine_task get_return_object() { return coroutine_task 这个关键字要求实现 COROUTINE_OBJECT::promise_type::return_value(参数) 或者 COROUTINE_OBJECT::promise_type::return_void

    1.2K70编辑于 2023-03-17
  • 来自专栏刘晓杰

    Coroutine(协程)(三)

    ArithmeticException") } } 输出 Throwing exception from launch Exception in thread "DefaultDispatcher-worker-2 @coroutine

    67020发布于 2021-03-04
  • 来自专栏全栈程序员必看

    协程(coroutine)简介

    ,简单的 C 协程库 coroutine 是基于 ucontext 的一个 C 语言协程库实现。 %d : %d\n", coroutine_running(S), start + i); coroutine_yield(S); } } int main() { = {100}; int co1 = coroutine_new(S, foo, &arg1); // 注册协程函数 int co2 = coroutine_new(S, foo, & arg2); printf("main start\n"); while (coroutine_status(S, co1) || coroutine_status(S, co2)) { coroutine_resume(S, co1); // 执行协程 coroutine_resume(S, co2); } printf("main end

    1.6K20编辑于 2022-09-07
  • Lua 的 Coroutine 模块

    函数说明coroutine.create创建协程对象coroutine.close关闭协程对象coroutine.resume恢复协程coroutine.yield让出协程coroutine.wrap创建协程对象 ,返回一个恢复函数coroutine.isyieldable检查协程能否让出coroutine.running获取正在运行的协程对象coroutine.status获取协程状态Lua支持协同程序(也称为协作多线程 让出时coroutine.resume返回true和coroutine.yield的所有参数。让出状态下的协程可以调用coroutine.resume来恢复执行。 协程恢复时从此前让出时调用coroutine.yield函数的位置继续执行,coroutine.yield返回coroutine.resume除了第一个参数以外的所有参数。 -通过coroutine.resume返回返回值正常情况下返回coroutine.resume的额外参数#coroutine.wrap展开代码语言:TXTAI代码解释coroutine.wrap(f)说明创建一个新的协程

    17310编辑于 2025-11-13
  • 来自专栏Android相关

    Kotlin---协程(Coroutine)介绍

    协程的原理 协程的概念从很早之前就提出来了,协程的介绍可以从Coroutine中了解。而每种语言的协程实现也有不同,Go,Lua等等的实现方式也不经相同,但是大体一致。 而在1.3之前的Kotlin版本中,Coroutine则是作为Experimental的功能提供的。 Kotlin中的协程也是通过线程池来实现的。

    2K20发布于 2018-12-26
  • 来自专栏刘晓杰

    Coroutine(协程)和retrofit

    Coroutine是kotlin官方文档上推荐的,个人理解,其实就是一个轻量级的线程库 使用前加依赖 implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core :1.3.1' 1.Coroutine基础 1.1 生成一个Coroutine import kotlinx.coroutines.* fun main() = runBlocking<Unit> { // start main coroutine GlobalScope.launch { // launch a new coroutine in background and continue for 2 seconds to keep JVM alive } GlobalScope.launch是最高等级的coroutine(类似于守护进程)。 其实两者都是把整个activity视为最大的Coroutine,只需要在onDestroy的时候把最大的cancel,那么内部所有的子Coroutine也会先自行cancel,也就达到了生命周期管理的功能

    1.6K20发布于 2020-06-02
  • 来自专栏tkokof 的技术,小趣及杂念

    Coroutine,你究竟干了什么?

    Coroutine是什么?    面对这种从未见过的延时实现方式,虽然代码表达上很容易让人理解,一开始的我却显得有些抵触,首先的一个疑问就是:这Coroutine是什么? 从字面意思上来理解,Coroutine应该就是“协程”的意思,而这所谓的“协程”又是什么东西?第一个想到的便是Lua中“协程”,Unity中的Coroutine难道也是这个概念吗? coroutine.MoveNext())         // This coroutine has finished         continue;     if(! coroutine.Current is YieldInstruction)     {         // This coroutine yielded null, or some other value

    1.3K10发布于 2018-08-02
  • 来自专栏葵花宝典007

    go语言 记录 coroutine goroutine

    进入正题,首先为啥要协程,总结来说也是为了更高效的性能,具体来说就是使用cpu上,协程定义成轻量级的线程,在异步解决io任务的时候,有点类似多线程,不过协程开销小,没有线程切换开销,而且相对于回调机制,代码易于阅读。

    40410编辑于 2022-07-17
  • 来自专栏刘晓杰

    Coroutine(协程)(一)

    Coroutine是kotlin官方文档上推荐的,个人理解,其实就是一个轻量级的线程库。 { delay((i + 1) * 200L) // 延迟 200 毫秒、400 毫秒、600 毫秒等等不同的时间 println("Coroutine

    1.1K10发布于 2021-03-04
  • 来自专栏原创分享

    云风coroutine库源码分析

    coroutine库是云风大佬以前写的一个协程库,短小精悍,源码分析在这(https://github.com/theanarkh/read-coroutine-code)。 // 协程的表示 struct coroutine { // 协程任务函数 coroutine_func func; // 用户数据,执行func的时候传入 void * // 申请一个表示协程的结构体 struct coroutine * _co_new(struct schedule *S , coroutine_func func, void *ud) { %d : %d\n",coroutine_running(S) , start + i); coroutine_yield(S); } } 协程执行到一个地方,执行coroutine_yield 实现协程的切换,我们看看coroutine_yield的实现。

    91110发布于 2020-05-08
  • 来自专栏tkokof 的技术,小趣及杂念

    Coroutine,你究竟干了什么?(小续)

    前篇中讲了一些自己关于Coroutine的理解,后来陆陆续续的又想到了一些,在此简单记录一下,内容不多,故作“小”续吧 :)   之前的示例程序基本实现了一个自己的WaitForSeconds,功能上及使用上都与 中又以yield return的方式开启了另一个Coroutine,例如以下代码: void Start() { // start unity coroutine StartCoroutine(UnityCoroutine 在Unity中,每次调用StartCoroutine都会返回一个特殊的Coroutine类型,而这个类型便是我们实现嵌套Coroutine的突破口! 好了,首先让我们实现一下自己的Coroutine类型: // //    <maintainer>Hugo</maintainer> //    

    coroutine simple class ,Unity自建的Coroutine控制都更好更细致,自己实现的Coroutine则相对粗糙了不少,而且不要忘了,我们目前还不支持WaitForFixedUpdate、WaitForEndOfFrame

    85920发布于 2018-08-02
  • 来自专栏Golang语言社区

    Golang语言--Coroutine可能存在的死锁

    第一种情况, 如果没有select{}, main 主线程不会等待coroutine运行,导致coroutine得不到机会运行。 2. coroutine有机会运行,但是会发生死锁, fatal error: all goroutines are asleep - deadlock!

    994100发布于 2018-03-21
  • 来自专栏我的Android开源之旅

    XTask与Kotlin Coroutine的使用对比

    不过说实在话,与上面Kotlin Coroutine实现的方式还是相对繁琐一些的。 总结: 整体比较下来,Kotlin Coroutine完胜XTask。 可维护性 1.Kotlin Coroutine遵循的是函数式编程的原则,本质上还是面向过程式的编程。 总结: 整体比较下来,XTask是要优于Kotlin Coroutine的。 性能 在性能上,XTask为了实现业务与数据之间的隔离,设计了共享数据的结构,相比较Kotlin Coroutine而言,多了数据拷贝以及数据存储的过程,所以无论是在时间还是空间上而言,Kotlin Coroutine 如果你是函数式编程的爱好者,那么一定是选择Kotlin Coroutine; 如果你是面向对象编程的爱好者,那么XTask一定是个不错的选择; 如果追求开发的效率,那么可以优先考虑Kotlin Coroutine

    1.1K40编辑于 2022-08-30
领券