C++中的std::thread和Go语言中的goroutine有何区别?

3

Go语言中的goroutine本质上是自动化的纤程/协程。

C++中的std::thread本质上是对本机线程的封装。

我认为std::thread应该是并行工作的抽象,而不仅仅是本机线程。在云计算时代,这非常重要。

是否有办法像下面这样使用std::thread:

std::thread<GoroutingStyle>    t1;
std::thread<NativeThreadStyle> t2;

如果没有,C++标准是否考虑添加一些功能/库来支持goroutine?

1
如果你搜索一下,就可以找到C/C++的协程库。语言本身不需要提供显式支持。从那里进行封装也不难。 - mah
@mah 该语言也不需要显式支持容器,因此我们应该继续删除 std::vector 等。话虽如此,通常情况下 boost 可以帮助贫血的 C++ 标准库。 - Voo
1
@Voo 我从未暗示过不能或甚至不应该添加这样的支持(我对此没有任何意见),我只是提到现有的支持并非必需,以利用包装的协程模型。你似乎读入了比所提供的更多的东西。 - mah
1
@mah 如果是这样,我道歉。我对这一点有些敏感,因为很多人似乎都在为 C++ 最大的问题(不足的标准库)辩护,他们会说“只需使用其中一个库”,而忽略了这种解决方案带来的可移植性和质量问题。 - Voo
@Kissaki,我认为std::thread应该是并行工作的抽象,而不仅仅是本地线程。在云计算时代,这非常重要。 - xmllmx
显示剩余4条评论
1个回答

1
如果不行,C++标准考虑添加一些功能/库以支持goroutine吗? 您所请求的类似于纤程库的东西 - 即将推出的库boost.fiber包含了协作调度的纤程,互斥量/条件变量/屏障/... - 接口与boost.thread类似。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接