seastar::thread是一个堆栈协同程序吗?



Seastar允许通过使用Seastar::thread对象编写这样的代码它有自己的栈。

seastar::线程分配一个128KB的堆栈,并运行给定的堆栈函数调用之前,它会阻塞对future的get()方法的调用。在seastar::thread上下文中,get()只能在未来是可以实现的。但是在线程内部,调用get()在尚未可用的future上停止运行线程函数,并为这个未来安排一个延续,其中继续运行线程的函数(在同一保存的堆栈上)

以上句子引用自seastar教程,这是否意味着seastar::thread是一种堆栈协同程序?

是的,seastar::thread和"堆栈协作";确实是非常相似的概念。

注意Seastar也支持stackless使用新的c++ 20协程特性。现在,这几乎总是优于堆栈协程(seastar::thread):无堆栈协程更轻,在高度并发的操作中也很有用(每个服务员一个堆栈是一个很大的浪费),在c++语言中有更好的支持。无堆栈协同程序也与基于未来的代码更好地合作——当你编写一个函数时,假设它在seastar::thread中运行,也就是说,在未准备好的未来中使用get(),你只能从seastar::thread中调用这个函数。相反,如果你用新的c++语法编写一个无堆栈协程,你可以从任何基于未来或基于协程的代码中调用它。

最新更新