我有一个用柏林德尔福101写的COM。我编写了一个脚本来调用它的API(只有一个API,单线程,每个需要大约1分钟才能完成)。
我使用cscript.exe(64位)运行vbs文件(我使用simple job runner here),同时运行许多副本(因此有很多进程)。
但是,我已经在许多PC(Windows 10 Pro)上进行了测试,并且观察到只有大约1个核心正在运行,尽管它有许多核心。
例如,在我的2个CPU(HPZ800 Intel Xeon X5650,每个6个核心= 12个核心)上,只使用了1个核心。
如果某些脚本提前退出,那么剩余的CPU使用率将会提高,但总共不超过1个核心。
我的问题是,如何编写代码以便从多核中受益?
答案 0 :(得分:0)
为了同时使用多个核心,需要多个线程 需要。反之亦然!
要真正利用多核系统,应用程序应该 将主要处理分成多个线程。它的 算法需要并行化。
来源:https://scalibq.wordpress.com/2012/06/01/multi-core-and-multi-threading/
我的COM API是单线程的。因此,多个进程不允许OS使用所有核心。正如评论中所解释的那样,如果每个进程只是休眠60秒,就无法解决所有核心问题。
我还有另一个完全多线程的API,即使只有1个进程也可以使用所有内核。
此外,还提到如果有I / O竞赛或多个进程争用相同的资源,核心的利用率将受到影响。
更新我做了一些实验,结果证明单线程进程最多可以利用一个核心,但是启动多个核心可以利用所有真正由操作系统决定的内核来决定。请详细了解我的实验When Can Windows Utilize All the Cores?