我想自动限制一些(imagemagick 图像处理)批处理作业在单个逻辑处理器上的后台运行,以尽量减少对其他实时应用程序性能的影响。
我拼凑起来的方法是使用命令行参数作为标志。当批处理文件首次启动时没有命令行参数(也没有关联),它将再次启动自身,并将关联设置为最后一个逻辑处理器,添加一个虚拟参数以指示关联已设置并继续执行主体批处理作业:
REM START OF THISBATCHFILE.CMD
IF NOT [%1]==[] GOTO AFFINITY_SET
SET LAST_PROCESSOR=1
FOR /L %%I IN (2,1,%NUMBER_OF_PROCESSORS%) DO SET /A LAST_PROCESSOR*=2
PROCESSOR = %LAST_PROCESSOR%
START /B /AFFINITY %LAST_PROCESSOR% THISBATCHFILE.CMD DUMMY_ARGUMENT
EXIT 0
:AFFINITY_SET
REM Batch Job Starts Here
REM ImageMagick command 1
REM ImageMagick command 2
REM ...
REM ImageMagick command N
REM Batch Job Ends Here
EXIT 0
这似乎在我的 4 核 Win8.1 系统上运行良好,可以将批处理作业限制在最后一个(第 4 个)逻辑处理器上。我的问题是 - 有没有“更好”的方法来做到这一点?