首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >实现Go goroutines或Go channel的C++库?

实现Go goroutines或Go channel的C++库?
EN

Stack Overflow用户
提问于 2010-12-16 04:16:43
回答 4查看 11.8K关注 0票数 29

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

遗憾的是,由于各种完全合理的原因,该项目需要留在C++中。所以我的问题是:有没有一个C++库可以近似于Go模式的并行性?具体地说,是否有一个近似的goroutines或go通道可用于C++?我的备用计划就是使用boost::thread。

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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-12-16 06:56:34

如果你的目标主要是加快计算速度,英特尔的TBB (线程构建块)是一个比从boost::thread上运行你自己的低级版本更好的选择。

票数 7
EN

Stack Overflow用户

发布于 2010-12-16 05:07:37

试试GBL library,它什么都有:协程(纤程)、线程、同步和异步处理程序--而且它都是现代的C++。

票数 2
EN

Stack Overflow用户

发布于 2019-11-28 20:11:27

libgolang提供了go和包括工作select在内的通道。示例用法如下:

代码语言:javascript
运行
复制
      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的协程。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4454444

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档