Cpu

如何在兩個 CPU 上分配一個程序

  • March 11, 2021

我有一個 Ubuntu 伺服器,它有 16 個 CPU。(nproc --all給我看16

我寫了一個 bash 腳本,命名test.sh如下:

#!/bin/bash


while :
do
   echo xxx
done

我執行了它:./test.sh >/dev/null &.

然後我用命令top監控cpu使用情況,我發現一個cpu幾乎100%被使用了,因為這個過程test.sh

6411 me       20   0   11240   3052   2852 R  93.8  0.0   0:11.71 test.sh
%Cpu5 : 96.7 us,  3.3 sy,  0.0 ni,  0.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st

如我們所見,該程序test.sh已分配到第 5 個 CPU 上,幾乎 100% 已被使用。

是否可以在多個 CPU 上分配一個繁重的程序,以便我們可以更多地使用 CPU?為什麼作業系統不將程序分配到test.sh多個 CPU 上?是因為程序test.sh不夠重還是我們應該為作業系統做一些配置?

單個執行緒不能在多個核心之間拆分:

需要編寫一個程序以具有多個執行緒(每個核心一個),或者需要多個程序。如果沒有,那麼您將不會使用核心。

編寫程序以使用更多核心並非易事,而且並非所有問題都可以並行化(編寫為在多個核心上執行)。如果一個問題包含 20% 的基本順序程式碼,那麼使用無限數量的處理器,它不會比原始執行時間快 20%(速度提高 500%)。然後是成本(執行緒之間的通信)。

如果您沒有任何核心應用程序,那麼您最好將其出售並獲得更便宜的機器。

每個核心都會有大量的並行性,以處理單個執行緒,但這不可見。現在,隨著我們添加核心,我們正在努力使單個核心更快。這起初運作良好。

Unix 系統(例如 Gnu/Linux,例如 Ubuntu)在使用額外核心方面做得很好,最多 2→4 個左右。微軟的 Windows,如果你有一個用於病毒掃描程序的核心,一個用於碎片整理程序,一個用於其他所有功能,就會得到改進。

之後,只有為多核設計的應用程序才會有所作為。

引用自:https://unix.stackexchange.com/questions/523252