【发布时间】:2014-11-06 18:30:34
【问题描述】:
在执行我的多线程程序期间,仅使用了 8 个可用 CPU 中的 4 个。为什么? 我可以更改什么以使所有 CPU 正常工作?
Parallel.ForEach(0, CalcList.Count-1)
.NumTasks(nMax)
.NoWait
.Execute(
procedure(const value: integer)
begin
CalcUnit.EntrySearch(value);
end);
(nMax 和 CalcList.Count 均为 16,Intel I7 超线程)
谢谢
【问题讨论】:
-
FWIW 超线程对于 cpu 绑定任务没有太大帮助。
-
OTL 中是否没有允许您将 OTL 限制为仅使用物理内核而不使用虚拟内核的选项?
-
@SilverWarior OP 正在谈论 8 个内核(16 个超线程),但只有 4 个内核被使用。虽然检查 CPU 是否真的有 4 个或 8 个内核可能是件好事。
-
请听我们的。如果您的工作受 I/O 限制,那么投入更多 CPU 将无济于事,而且很可能只会让您的程序变慢。
-
@FritsMolenkamp 如果由于 IO 瓶颈而不需要它们,操作系统不会费心为您的程序提供所有 8 个 CPU。
标签: multithreading delphi omnithreadlibrary