2014-11-01 97 views
3

我想知道具有更多線程數的多線程程序如何在處理器內核上執行。例如,我的程序有12個線程,我正在intel core-i5機器上運行它。它有四個CPU。每個核心會運行3個線程嗎?我很困惑,因爲我看到有三個線程運行在4核心機器上的程序。在處理器內核上如何執行多個線程

謝謝

+1

多進程運行的相同方式:分時。 – Barmar 2014-11-01 00:13:27

+1

在大多數非嵌入式設備上,內核會設置一箇中斷以在一定時間後觸發,然後加載其中一個線程並在用戶空間中運行,然後當中斷觸發時,中斷處理程序返回內核空間,然後內核有時會切換到另一個線程,再次設置中斷。沖洗並重復。 – PeterT 2014-11-01 00:25:55

+0

我有一個4/8核心的i7。它正在管理1215個線程。沒問題,因爲幾乎沒有任何人在跑步。 – 2014-11-01 00:39:58

回答

3

每個內核都能夠同時執行一個線程。所以如果有30個線程和4個內核,26個線程將等待上下文切換以執行。例如,線程1-4運行200毫秒,然後運行5-8秒,等待200毫秒等等。

+0

好的!我知道了。所以基本上,操作系統調度程序或內核進入遊戲呢? – user225008 2014-11-01 15:00:33

+0

@ user225008是的確的 – Steve 2014-11-01 20:02:10

+0

@Steve你有沒有建議任何書來挖掘這個? – 2016-03-27 11:42:21

5

一個內核負責執行線程週期。您擁有的核心越多,可以同時運行的線程越多。每個內核一次只能執行一條指令,但速度如此之快,看起來好像您同時運行多個線程。 Intel Processors支持Hyper Threading使單核能夠支持多線程,因爲operating system看到每個物理核心的邏輯核心數量的兩倍。例如,只有雙核的Core i3實際上可以爲每個內核提供兩個線程,即總共四個線程可以同時運行。然而,即使Core i5 processors是四核,因爲它們不支持超線程(除了i5-661),它們可以同時服務的線程數量與它們的Core i3對應的線程數量大致相等。

+0

「每個內核一次只能執行一條指令」:Intel的Core微架構是[superscalar](http://en.wikipedia.org/wiki/Superscalar)。 (即使是英特爾的Atom微架構和ARM的Cortex-A8也是超標量的。) – 2014-11-01 11:59:48

+0

@Paul:這是一般的核心聲明。 – 2014-11-02 04:11:24

0

處理器內核能夠一次執行一個線程。在四核中,4個線程同時執行。不是所有的用戶空間線程都是同時執行的,內核線程也會運行以調度下一個線程或執行一些其他內核任務。

相關問題