繁体   English   中英

TParallel::For 中默认使用多少个线程?

[英]How many threads are used by default in TParallel::For?

我想在 C++ Builder 中使用TParallel::For ,但想知道在这个循环中默认使用了多少线程? 例如,如果我有 1000 次可以并行执行的迭代,它们是否会通过一次创建 1000 个线程来执行,或者任何时候的最大线程数受逻辑处理器数量的限制?

我的观点是 - 我不想让TParallel::For一次创建更多线程然后 CPU 支持。 那么,如果 CPU 支持 8 个线程,这些迭代是 8 个 8 次执行,直到所有 1000 个迭代都执行完毕,还是会同时创建 1000 个线程?

默认池处理程序查找计算机资源和计算机负载。

来自文档(强调我的):

RTL 提供并行编程库 (PPL),使您的应用程序能够利用跨多个 CPU 设备和计算机的工作并行运行任务。 PPL 包括许多高级功能,用于运行任务、加入任务、等待任务组等进行处理。 对于所有这些,有一个线程池可以自动自我调整(基于 CPU 的负载),因此您不必关心为此目的创建或管理线程。

如果你想控制池化,你可以定义你自己的池

当指定了 TThreadPool 类型的 APool 参数时,程序作者通过使用其 TThreadPool.SetMinWorkerThreads 和 TThreadPool.SetMaxWorkerThreads 方法来控制可用于 TParallel.For 的迭代事件的线程资源。 调用这些方法时请注意,过多的并发线程会产生开销,从而减少或消除并行执行例程的好处。


默认线程池使用以下限制进行初始化:

FMinLimitWorkerThreadCount := TThread.ProcessorCount;
FMaxLimitWorkerThreadCount := TThread.ProcessorCount * MaxThreadsPerCPU;

MaxThreadsPerCPU是一个设置为 25 的常量。因此,根据处理器负载,池中使用的线程在这些数字之间有所不同。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM