我的方法是否符合线程池方法的条件? 我已经赢得了32 C++应用程序。我必须将330000个对象加载到内存中。如果我使用顺序法,大约需要16分钟。在线程方法中,我将330000个对象平均分配到10个容器中。我创建10个线程,并为每个线程分配一个大小为33000个对象的容器,以将它们加载到内存中。这种方法大约需要9分钟

我的方法是否符合线程池方法的条件? 我已经赢得了32 C++应用程序。我必须将330000个对象加载到内存中。如果我使用顺序法,大约需要16分钟。在线程方法中,我将330000个对象平均分配到10个容器中。我创建10个线程,并为每个线程分配一个大小为33000个对象的容器,以将它们加载到内存中。这种方法大约需要9分钟,c++,C++,增加线程数没有帮助 如果我使用ThreadPool,我会得到进一步的改进吗?一如既往,没有细节,这取决于具体情况 您是从磁盘加载对象还是在内存中创建对象?如果您是从磁盘加载它们,那么它可能是IO绑定的,因此增加线程数量可能不会有多大帮助 在您提到的注释中,您是从数据库加载的。我想当你使用线程时,你是在同时进行N个查询吗?可能值得研究数据库控制台,以了解它如何处理许多并发查询 另一方面,如果对象是由于某些CPU限制的进程(例如计算pi)而创建的,那么线程数量的增加可能比CPU数量的增加更大,这可能

增加线程数没有帮助


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

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

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

在您提到的注释中,您是从数据库加载的。我想当你使用线程时,你是在同时进行N个查询吗?可能值得研究数据库控制台,以了解它如何处理许多并发查询

另一方面,如果对象是由于某些CPU限制的进程(例如计算pi)而创建的,那么线程数量的增加可能比CPU数量的增加更大,这可能不会提高性能(正如ronag在评论中指出的,由于CPU数量的增加,可能会影响性能)

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


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

IME和您的系统中,一些线程将加速此类任务。我猜想,由于更好地利用了现代控制器上可用的“智能”磁盘缓存,总体吞吐量得到了提高——磁盘/控制器空闲时间更少,因为总有线程想要读取某些内容。然而,在只加载了几个线程并绑定了磁盘之后,就会出现递减返回。在一个稍微相似的应用程序中,我发现任何超过6个线程都不会带来额外的优势&只是占用了更多的内存

我看不出这些线程的池或其他方式对性能有什么影响——这只是一项必须完成的重大工作:(

告诉您的客户他们必须安装SSD

Rgds,
Martin

是的,我正在从数据库加载对象。我只想补充一点,创建比CPU更多的线程不仅不会提高性能,甚至可能会降低性能。是的,查询会同时传递到数据库。查询会进行微调。因此,我是否达到了最佳性能?@Sameer,有可能如果这真的很重要,您可以做更多的事情。例如,您可能正在将对象存储在STL容器中。您是否预先分配了大小(假设您知道有多少项)。唯一的方法是分析应用程序。我已经预先预留了容器的大小。是的,我将尝试分析。