先说结论:
不同的语言或者框架下的协程调度器原理是不同的,以下是统计:
Unity 协程调度器:主线程里只能有一个处于运行状态的协程。协程列表里按照创建顺序执行,如果在协程里写个死循环,则当前线程一直卡死在那。
参考:Unity基础篇:协程(协同程序)的概括(StartCoroutine 和yield return和StopCoroutine )_设计师养成记-CSDN博客
Go语言协程调度器:类似于线程调度器,是抢占式,有时间片,执行超时则线程会把该协程移到队尾,让另一个协程执行,同时支持并行执行。如果写个死循环,当前线程是不会卡死的。协程执行顺序是串行,根据创建顺序依次执行
参考:[典藏版] Golang 调度器 GMP 原理与调度全分析 | Go 技术论坛 (learnku.com)
两种任务调度方式(goroutine,coroutine) - wangsong412 - 博客园 (cnblogs.com)
libco 协程调度器:co_eventloop