OS 如何为我的应用程序使用所有内核?

How can the OS use all cores for my application?

我有一个用 Delphi 101 Berlin 编写的 COM。我写了一个脚本来调用它的 API(只有一个 API,单线程,每个大约需要 1 分钟才能完成)。

我运行的vbs文件使用cscript.exe(64位)(而我用的是simple job runner here),多份(所以有很多进程),同时.

然而,我已经在许多 PC (Windows 10 Pro) 上进行了测试,并且观察到只有大约 1 个内核是 运行ning,尽管它有很多内核。

例如,在我的 2 CPU 上(HPZ800 Intel Xeon X5650,每个 6 个内核 = 12 个内核),仅使用了 1 个内核。

如果一些脚本提前退出,那么其余CPU的使用会得到改善,但总和不超过1个核心。

我的问题是如何编写代码才能从多核中获益?

In order to use multiple cores at the same time, multiple threads are required. The inverse is not true!

To really take advantage of a multi-core system, an application should split up the main processing into multiple threads as well. Its algorithms need to be parallelized.

来源:https://scalibq.wordpress.com/2012/06/01/multi-core-and-multi-threading/

我的 COM API 是 single-threaded。因此,多进程不会让OS利用所有核心。正如评论中所解释的那样,如果每个进程只休眠 60 秒,那么就没有办法麻烦所有的核心。

我还有另一个 API 具有完全多线程,即使只有 1 个进程也可以利用所有内核。

另外,有人提到,如果存在 I/O 竞争或多个进程争夺同一资源,核心的利用率将受到影响。

Update 我做了一些实验,结果是 single-threaded 进程最多可以使用一个内核,但是启动多个内核可以使用所有内核真的取决于 OS 来决定。详细请看我的实验When Can Windows Utilize All the Cores?