D7多线程如何分配CPU
请教下。我用D7做了个多线程的程序,运行的时候发现,就算多线程也只是用CPU的一个核。我运行在至强CPU服务器上,有一个核基本都跑到100%了,其他3个核还空闲着。我要怎么解决这个问题,让程序跑的跟有效率一点?
用这个 SetThreadAffinityMask
正常来说操作系统会帮你做自动分配线程的处理器亲缘性. 当然也可以用SetThreadAffinityMask来强制设置线程的处理器亲缘性.
但是如果你一个线程机器消耗CPU资源,而其他线程几乎不消耗CPU资源,那么你看到一个核心资源占用高也是正常的.
program Project1; {$APPTYPE CONSOLE} uses SysUtils, Classes, Windows; type TRunThread = class(TThread) protected procedure Execute(); override; end; var dwCpuCount: Cardinal; curCpu: Cardinal = 0; procedure TRunThread.Execute; var startTime: Cardinal; begin startTime := GetTickCount; while not Terminated do begin if GetTickCount - startTime > 8000 then begin Inc(curCpu); if curCpu > dwCpuCount then curCpu := 0; SetThreadAffinityMask(Self.Handle, curCpu); startTime := GetTickCount; end; end; end; function getCpuCount: Cardinal; var sysinfo: TSystemInfo; begin GetSystemInfo(sysinfo); Result := sysinfo.dwNumberOfProcessors; end; begin dwCpuCount := getCpuCount; TRunThread.Create(False); Readln; end.
|