实现 Go goroutine 或 Go 通道的 C 库?

新手上路,请多包涵

我正在使用目前完全是单线程的中型 C++ 代码库。然而,现在是追求并发性和并行性以提高性能的时候了。我对 Google 的 Go 编程语言的并发模型非常感兴趣,它具有非常轻量级的 goroutine 和通信通道系统。

遗憾的是,出于各种完全正当的原因,该项目需要保留在 C++ 中。所以我的问题是:是否有一个 C++ 库可以近似于 Go 的并行范式?具体来说,是否有可用于 C++ 的 goroutine 或 go 通道的近似值?我的后备计划只是使用 boost::thread。

有问题的应用程序是金融预测领域长期运行的专有模拟。它通常受 CPU 限制,但当新数据可用时也会在 IO 上被阻塞。所涉及的许多计算不依赖于先前的结果,并且可以相当容易地并行运行。能够在分布式上下文中运行应用程序是一项长期目标,但不是需要立即解决的目标。

原文由 Derek Thurn 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 957
2 个回答

如果您的目标主要是加快计算速度,那么英特尔的 TBB (线程构建块)是(恕我直言)比从 boost::thread 推出自己的劣质版本更好的选择。

原文由 timday 发布,翻译遵循 CC BY-SA 3.0 许可协议

这个问题,一般来说,谷歌搜索“C++ coroutines”应该会让你很接近。 SO问题建议尝试Boost::coroutine。

如果您不介意包装 C,您 可以 尝试 libtask 。这是由 Russ Cox(官方 Go 开发团队之一)在 Go 工作开始之前编写的。我只在C中使用过它,所以我不知道它是否适用。

顺便说一下,Go 通道被实现为锁定队列,因此您可以使用常规线程来合并类似的机制。

原文由 cthom06 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题