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

遗憾的是,由于各种完全合理的原因,该项目需要保留在C++中.所以我的问题是:有没有接近Go并行范例的C++库?具体地说,是否有近似的Goroutine或Go通道可用于C++?我的备用计划只是使用Boost::Thread.

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

推荐答案

如果你的目标主要是加快计算速度,英特尔的TBB(线程构建块)是一个更好的 Select (IMHO),而不是从boost::thread推出自己的劣质版本.

Go相关问答推荐

如何使用GRPC UnaryClientInterceptor中的`maily`参数?

CGO如何转换为文件*类型

使用一元或服务器流将切片从GRPC服务器返回到客户端

是不是有什么原因导致`Strings.EqualFold`不先进行长度比较?

如何在Golang中使用ECHO服务器实现Socket.IO服务器

golang testscript .txtar 语法,用于 stderr 或 stdout 中包含的文本

在多个 struct 体中重用 Go 中的函数

是否需要手动调用rand.Seed?

是否可以在调试期间在 VSCode 中预览 github.com/shopspring/decimal 值?

有没有什么方法可以在不使用 if/else 的情况下在 Golang 中处理 nil 指针?

如何使用带有方法的字符串枚举作为通用参数?

为什么 0 big.Int 的 .Bytes() 值是空切片?

如何 Select 前 N 个元素 Gin-Gorm

实现接口的指针的泛型类型是什么?

如何正确判断 io.Reader 是否为零?

如何从字符串中删除多个换行符`\n`但只保留一个?

关于GO的几个问题

我应该明确地创建一个与Belongs To或Has Many对称的关系吗?

如何在程序退出时使用 golang 删除文件?

从类型别名转换为原始类型