首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实现协同线的不同方法

实现协同线的不同方法
EN

Stack Overflow用户
提问于 2022-03-13 13:24:26
回答 1查看 252关注 0票数 1

目前,我可以想到两种实现协同机制的方法:

每当启动协同线时,

  1. ,而不是将局部变量存储在堆栈中,而是从堆中获取一段内存,并使用它存储局部变量。这样,局部变量就不会被破坏,任何被调用的函数都可以在稍后时间返回到该函数。但是在这种情况下,任何被调用的函数都必须在主调用堆栈上运行。我不知道这会不会引起什么问题。有人能确认一下吗!
  2. ,每当协同线启动时,为该协同线分配比所需的内存更多的内存。这就像某种自定义的协同调用堆栈。在这种情况下,调用的所有子函数都将与这个协同线一起存储。但是这个实现可能需要过多的冗余内存。

我认为这两者都是众所周知的无堆栈和堆叠的协同线。

从理论上讲,实现协同机制的其他可能方法是什么?它们的优点和缺点是什么?哪种语言使用哪种实现?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-03-16 13:08:18

您的选项(1)确实是一个无堆栈的协同机制,这就是它在Kotlin中的实现方式,通常是Javascript (异步/等待)实现的。当您不一定拥有其他方法所需的调用堆栈的低级控件时,您就是这样做的。使用此策略的语言需要以某种方式标记可挂起的函数。这被称为“红色/蓝色函数问题”。请参阅:https://journal.stuffwithstuff.com/2015/02/01/what-color-is-your-function/

对调用堆栈有低级控制的语言可以以各种方式实现协同,但它们都不像您的选项(2)。它们通常包括在需要时将数据复制到调用堆栈或从调用堆栈中复制出来(比如Java项目织机),或者使用完全不同的数据结构来代替调用堆栈(比如早期的Go实现)。在这些语言中,可调用的协同函数通常不需要特殊的标记。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71457170

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档