Unity中的Coroutine原理猜测: 虚拟机分段执行机制, 同类型嵌套用栈存放实现串行执行:.NET虚拟机在每一帧循环中, 会依次进入每个编译器预定义好的入口。对于Coroutine类型,编译器需要产生一些代码,在Coroutine类型指定的时间或事件完成后(.net的虚拟机用函数指针进行标记管理现场和在流程中每帧检查时间或者事件满足后发送消息,将cpu所有权交给yield中断的现场,或是通过包含不同Coroutine迭代器的多个管理类管理各个coroutine, 每帧用coroutine子类通过多态检查时间或事件到达,将cpu所有权交给coroutine子类中断的现场),从yield中断后的代码处继续往下执行, 这样就形成了我们看到的一个function能分段执行的机制。 而对于嵌套Coroutine类型,会串行的执行而不是并行的,可能.net虚拟机对于同coroutine类型用栈存放,栈顶的先执行,从而实现串行执行,如果外层的不使用yield return,那么不会串行执行,而是并行执行。于是就可以解释上面例子中的执行次序问题。
相关推荐
東雪木2 小时前
多线程与并发编程 专属复习笔记Oll Correct3 小时前
实验二十九:TCP的运输连接管理飞翔中文网4 小时前
Java学习笔记之抽象类与接口(设计思想)智者知已应修善业5 小时前
【proteus设计文氏正弦波信号发生器】2023-5-9凉、介6 小时前
深入理解 ARMv8-A|处理器模式与寄存器whyTeaFo7 小时前
MIT 6.1810: Lec 5: calling conventions and stack frames RISC-V上课不要睡觉了8 小时前
【统计法规】4.1统计管理体制概述墨白曦煜8 小时前
算法实战笔记:剥开回溯算法的外衣——从通用模板到高阶去重(八)Upsy-Daisy9 小时前
IOTA 学习笔记(四):当前 IOTA 架构总览山楂树の9 小时前
JS中??和||的区别