目前,我可以想到两种实现协同机制的方法:
每当启动协同线时,
我认为这两者都是众所周知的无堆栈和堆叠的协同线。
从理论上讲,实现协同机制的其他可能方法是什么?它们的优点和缺点是什么?哪种语言使用哪种实现?
发布于 2022-03-16 13:08:18
您的选项(1)确实是一个无堆栈的协同机制,这就是它在Kotlin中的实现方式,通常是Javascript (异步/等待)实现的。当您不一定拥有其他方法所需的调用堆栈的低级控件时,您就是这样做的。使用此策略的语言需要以某种方式标记可挂起的函数。这被称为“红色/蓝色函数问题”。请参阅:https://journal.stuffwithstuff.com/2015/02/01/what-color-is-your-function/
对调用堆栈有低级控制的语言可以以各种方式实现协同,但它们都不像您的选项(2)。它们通常包括在需要时将数据复制到调用堆栈或从调用堆栈中复制出来(比如Java项目织机),或者使用完全不同的数据结构来代替调用堆栈(比如早期的Go实现)。在这些语言中,可调用的协同函数通常不需要特殊的标记。
https://stackoverflow.com/questions/71457170
复制相似问题