我正在使用一个中等大小的C++代码库,它目前完全是单线程的。然而,现在是时候追求并发性和并行性来提高性能了。我对Google的Go编程语言的并发模型非常感兴趣,它具有非常轻量级的goroutines和一个通信通道系统。
遗憾的是,由于各种完全合理的原因,该项目需要留在C++中。所以我的问题是:有没有一个C++库可以近似于Go模式的并行性?具体地说,是否有一个近似的goroutines或go通道可用于C++?我的备用计划就是使用boost::thread。
所讨论的应用程序是一个针对财务预测领域的长期运行的专有模拟。它通常是CPU受限的,但当有新数据可用时,也会在IO上被阻塞。所涉及的许多计算都不依赖于以前的结果,并且可以相当容易地并行运行。能够在分布式上下文中运行应用程序是一个长期目标,但不是需要立即解决的目标。
发布于 2010-12-16 06:56:34
如果你的目标主要是加快计算速度,英特尔的TBB (线程构建块)是一个比从boost::thread上运行你自己的低级版本更好的选择。
发布于 2010-12-16 05:07:37
试试GBL library,它什么都有:协程(纤程)、线程、同步和异步处理程序--而且它都是现代的C++。
发布于 2019-11-28 20:11:27
libgolang提供了go和包括工作select在内的通道。示例用法如下:
chan<int> ch = makechan<int>(); // create new channel
go(worker, ch, 1); // spawn worker(chan<int>, int)
ch.send(1)
j = ch.recv()
_ = select({
_default, // 0
ch.sends(&i), // 1
ch.recvs(&j), // 2
});
if (_ == 0)
// default case selected
if (_ == 1)
// case 1 selected: i sent to ch
if (_ == 2)
// case 2 selected: j received from ch
defer([]() {
printf("leaving...\n");
});
if (<bug condition>)
panic("bug");go根据激活的运行时生成线程或基于gevent的协程。
https://stackoverflow.com/questions/4454444
复制相似问题