实现Go goroutines或Go频道的C++库?

Der*_*urn 26 c++ concurrency go

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

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

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

tim*_*day 6

如果您的目标主要是加速计算,那么英特尔的TBB(线程构建模块)(恕我直言)比滚动您自己的劣质版本更好boost::thread.


cth*_*m06 5

这个问题,一般来说,在Google上搜索“ C ++协程”应该可以使您接近。SO问题建议尝试使用Boost ::协程。

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

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