Unity中的Coroutine原理猜测: 虚拟机分段执行机制, 同类型嵌套用栈存放实现串行执行:.NET虚拟机在每一帧循环中, 会依次进入每个编译器预定义好的入口。对于Coroutine类型,编译器需要产生一些代码,在Coroutine类型指定的时间或事件完成后(.net的虚拟机用函数指针进行标记管理现场和在流程中每帧检查时间或者事件满足后发送消息,将cpu所有权交给yield中断的现场,或是通过包含不同Coroutine迭代器的多个管理类管理各个coroutine, 每帧用coroutine子类通过多态检查时间或事件到达,将cpu所有权交给coroutine子类中断的现场),从yield中断后的代码处继续往下执行, 这样就形成了我们看到的一个function能分段执行的机制。 而对于嵌套Coroutine类型,会串行的执行而不是并行的,可能.net虚拟机对于同coroutine类型用栈存放,栈顶的先执行,从而实现串行执行,如果外层的不使用yield return,那么不会串行执行,而是并行执行。于是就可以解释上面例子中的执行次序问题。
相关推荐
开心就多写,一点就开心2 小时前
导演视听语言与分镜系统笔记(一):景别系统、机位视点与时空连贯性设计疯狂打码的少年4 小时前
【计算机网络】IPv6基础(特点、表示法、与IPv4对比)泡泡鱼(敲代码中)6 小时前
MySQL基础学习笔记:从数据模型到DDL全掌握江湖人称菠萝包7 小时前
【Windows】《深入浅出Windows API程序设计:核心编程篇》笔记-Chapter4-进程今儿敲了吗8 小时前
03停用词过滤秦哈哈9 小时前
【Hello Agents】学习笔记(二)风早爽太10 小时前
Flutter 开发笔记:share_plus 分享插件宵时待雨11 小时前
linux笔记归纳19:网络层协议IPjavgo.cn11 小时前
Markune:一个开源的 Local-first Markdown 工作区逆境不可逃12 小时前
Pi Agent 学习笔记:不同模型如何接入同一套工具循环