Seastar允许编写这样的代码,方法是使用自己的堆栈附带的seastar::线程对象。 seastar::线程分配一个128 to堆栈,并在此之前运行给定的函数,直到它阻止对将来的get()方法的调用。在seastar::线程上下文之外,get()只能在已经可用的未来调用。但是,在线程内部,对尚未可用的未来调用get()将停止运行线程函数,并为这个未来计划一个延续,当将来可用时,它将继续运行线程的函数(在相同的保存堆栈上)。
以上句子引用自seastar教程,这是否意味着seastar::线程是一种堆积如山的协同线?
发布于 2022-05-09 16:32:52
是的,seastar::thread和“堆叠协同线”确实是非常相似的概念。
请注意,Seastar还支持使用新的协同器特性的无堆栈协同器。现在,这几乎总是比堆叠协同(seastar::thread)更可取:无堆栈协同操作更轻巧,并且在大量并发操作中也很有用(在这种操作中,每个服务员一个堆栈是一种很大的浪费),在C++语言中有更好的支持。无堆栈协同器还与基于未来的代码更好地合作--当您编写一个函数时,假设它在seastar::thread中运行,也就是说,在未做好准备的将来使用get(),您只能在seastar::thread内部调用该函数。相反,如果您用新的C++语法编写了一个无堆栈的协同线,那么您可以从任何基于将来的或基于协同的代码中调用它。
https://stackoverflow.com/questions/72135948
复制相似问题