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?
我有一个用 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?