gpt4 book ai didi

c++ - 我的方法是否符合线程池方法的条件?

转载 作者:搜寻专家 更新时间:2023-10-31 01:56:55 32 4
gpt4 key购买 nike

我有 win 32 C++ 应用程序。我必须将 330,000 个对象加载到内存中。如果我使用顺序方法,大约需要 16 分钟。在线程方法中,我将 330,000 个对象平均分配到 10 个容器中。我创建了 10 个线程,并为每个线程分配了一个大小为 33000 个对象的容器,以将它们加载到内存中。此方法耗时约 9 分钟。

增加线程数没有帮助......

如果我使用 ThreadPool,我会得到进一步的改进吗?

最佳答案

一如既往没有具体细节,这取决于。

您是从磁盘加载对象还是在内存中创建它们?如果您从磁盘加载它们,那么它可能是 IO 绑定(bind)的,因此增加线程数可能不会有太大帮助。

在您提到的评论中,您正在从数据库加载。我假设当您使用线程时,您同时进行 N 次查询?可能值得研究数据库控制台以了解它如何处理许多并发查询。

另一方面,如果对象是由于某些 CPU 绑定(bind)过程(例如计算 pi)而创建的,那么增加线程数量的可能性大于 CPU 数量可能不会提高性能(并且作为 ronag由于增加了 context switching ,评论中指出可能会损害性能。

对象之间是否存在依赖关系?这将再次影响事情的进展。

如果您有一组独立的任务,您希望以可配置的方式运行它们,那么您通常会使用线程池。听起来使用线程池是使用各种线程设置运行大量基准测试的好方法。您还可以使线程数可配置,这有助于在不同的体系结构/系统上运行。

关于c++ - 我的方法是否符合线程池方法的条件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6370447/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com