作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我有 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/
我是一名优秀的程序员,十分优秀!