CPU核數跟多執行緒的關係

2022-05-06 10:30:12 字數 1234 閱讀 4010

一直以來有這樣的疑惑,單核cpu適合多執行緒嗎?是不是幾個核的cpu開幾個執行緒是最合適的?

要說多執行緒就離不開程序,程序和執行緒的區別在這裡就不詳細說了,只將關鍵的幾點:

a)程序之間是相互獨立的,不共享記憶體和資料,執行緒之間的記憶體和資料是公用的,每個執行緒只有自己的一組cpu指令、暫存器和堆疊,對於執行緒來說只有cpu裡的東西是自己獨享的,程式中的其他東西都是跟同乙個程序裡的其他執行緒共享的。

b)作業系統建立程序時要分配好多外部資源,所以開銷大。(這個跟作業系統有關,有人做過實驗,window建立程序的開銷大,linux建立程序的開銷就很小。)

再來說一下cpu,在過去單cpu時代,單任務在乙個時間點只能執行單一程式。之後發展到多工階段,計算機能在同一時間點並行執行多工或多程序。雖然並不是真正意義上的「同一時間點」,而是多個任務或程序共享乙個cpu,並交由作業系統來完成多工間對cpu的執行切換,以使得每個任務都有機會獲得一定的時間片執行。而現在多核cpu的情況下,同一時間點可以執行多個任務,具體到這個任務在cpu哪個核上執行,這個就跟作業系統和cpu本身的設計相關了。

我們假設乙個極端的情況:在一台單核計算機上只執行2個程式,乙個是我們的程式a,另乙個是作業系統的程式b,每個程式是乙個程序。單核cpu的時候,a和b在cpu上交替執行,具體的分配方式由作業系統來判斷,我這裡猜測應該跟a和b的執行緒數有關,因為執行緒是cpu級別的,如果a有5個執行緒,b也有5個執行緒,那麼cpu分配給a和b的時間應該是1:1的;如果a增加到15個執行緒,cpu分配給a和b的時間應該是3:1的比例。所以此時如果a的執行緒數多,那麼獲得的cpu執行次數就多,處理的速度也就快了。以上假設的前提是:①a和b的優先順序相同,②a和b都是只消耗cpu資源的程式。

如果相同的情況用乙個雙核的計算機來處理又會是什麼結果呢?假設這個雙核的計算機和作業系統比較傻,把a程序分配到核1上,b程序分配到核2上,那不管a有幾個執行緒,都是用核1來處理,那麼時間肯定是一樣的。不過現實中應該不會有這麼傻的cpu和作業系統吧。

所以趕緊還是會根據執行緒來進行處理,當a的執行緒比b多時,會占用核2來處理a的執行緒。

剛才說的是只消耗cpu資源的程式,但這樣的程式在實際應用中基本上是沒有的,總會有跟資源打交道的。比如讀個檔案,查個資料庫,訪問乙個網路連線等等。這個時候多執行緒才真正體現出優勢,在乙個程序中,執行緒a去讀檔案,執行緒b去查資料庫,執行緒c去訪問網路,a先用一下cpu,然後去讀檔案,此時cpu空閒,b就用一下,然後去查資料庫,……,相對於讀檔案、查資料庫、訪問網路來說cpu計算的時間幾乎可以忽略不計,所以多執行緒實際上是計算機多種資源的並行運用,跟cpu有幾個核心是沒什麼關係的。

CPU 核數和執行緒數的關係

cpu 處理器。核心數cpu的大腦數量。核心數就跟人的大腦一樣,比如說,核心數2就說明cpu有兩個腦子,腦子越多解決問題的速度越快。cpu的核心數越高,處理速度就越高。核心數2通俗地說就是雙核cpu。執行緒數乙個核心就是乙個物理執行緒,核心數2就有兩個物理執行緒。但是,因特爾的超執行緒技術可以把乙個...

IO與CPU跟執行緒的關係

最近在看廖雪峰大神的python教程,看到一段對cpu和io操作的描述,以及與執行緒的關係,覺得寫得很清楚很棒,特此記錄 是否採用多工 也就是多程序 執行緒 的第二個考慮是任務的型別。我們可以把任務分為計算密集型和io密集型。計算密集型任務由於主要消耗cpu資源,因此,執行效率至關重要。python...

多執行緒和CPU的關係

什麼是cpu 1 central progressing unit 處理器,是一塊超大規模的積體電路,是一台計算機的運算核心和控制核心。2 cpu包括 運算器,高速緩衝儲存器,匯流排。3 它的工作,主要是解釋計算機中的指令,和處理計算機軟體中的資料。它在計算機中起著最重要的作用,構成了系統的控制中心...