Cpu
如何在兩個 CPU 上分配一個程序
我有一個 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,如果你有一個用於病毒掃描程序的核心,一個用於碎片整理程序,一個用於其他所有功能,就會得到改進。
之後,只有為多核設計的應用程序才會有所作為。