【发布时间】:2017-05-29 06:32:36
【问题描述】:
我有一个用 Delphi 101 Berlin 编写的 COM。我编写了一个脚本来调用它的 API(只有一个 API,单线程,每个大约需要 1 分钟才能完成)。
我使用 cscript.exe(64 位)(我使用 simple job runner here)运行 vbs 文件,同时运行多个副本(因此有很多进程)。
但是,我在许多 PC(Windows 10 Pro)上进行了测试,观察到只有大约 1 个内核在运行,尽管它有很多内核。
例如,在我的 2 个 CPU(HPZ800 Intel Xeon X5650,每个 6 个内核 = 12 个内核)上,只使用了 1 个内核。
如果某些脚本提前退出,那么其余的 CPU 使用率会有所提高,但加起来不超过 1 个内核。
我的问题是如何编写代码才能从多核中受益?
【问题讨论】:
-
您说“我使用 cscript.exe 运行 VBS 文件...很多副本(因此有很多进程)”。您是否有任何证据表明 cscript.exe 派生了许多进程?对我来说似乎很清楚您的项目正在作为单线程进程运行。
-
如您在屏幕截图中看到的,cscript.exe(进程)有很多副本,在我的应用程序中,它是单线程的。
-
另外,仅仅因为有很多进程正在运行,这并不意味着你会最大化你的 CPU。这取决于过程的性质。如果每个进程只执行一个 sleep() 60 秒,那么您可以拥有数千个进程而不会影响您的 CPU。
-
看this article 似乎你必须启用多核。你已经做过这个或类似的事情了吗?您还可以查看超级用户上的this question。
-
@PrestonHager 是的,它已经启用。您提供的文章主要是教您如何禁用某些内核。
标签: multicore