天天看點

多核CPU 和多個 CPU 差別 并行和并發 作業系統記憶體管理子產品 程序和線程

目錄

​​多核CPU 和多個 CPU 差別​​

​​并行和并發​​

​​作業系統記憶體管理子產品​​

​​程序和線程​​

​​多核CPU 和多個 CPU 差別​​

當你将這一百隻手全安裝到一個人身上,這模式就是多核。當你将這一百之手安裝到50個人身上工作,這模式就是多CPU。

​​多核CPU 和多個 CPU​​實質是一樣的可以并行執行程序 ,但是由于價格,執行效率,系統總線以及整體開銷等因素,還是多核心最合算。

并行和并發

當面臨這些問題的時候,有兩個關鍵詞無法繞開,那就是并行和并發。

并行:真正的同一時刻

并發:同一時間周期(我們感覺是同時執行,但是計算機執行周期是毫秒機關級别的,我們感覺不到)

首先,要先了解幾個概念:

程式的一次執行。

資源配置設定的基本機關。

  3、一個程序可以包括多個線程。

無法被多個程式并行使用的:CPU。

為一段段時間的運作片,輪流配置設定給不同的程式。(分時作業系統)

  6、作業系統記憶體管理子產品:管理實體記憶體、虛拟記憶體相關的事務。

  由于CPU同時刻隻能執行一個程序,如果我們不加以控制的話,一個程序可能使用CPU直到運作結束,于是出現了作業系統排程器,而程序也成為了排程機關。

  程序的運作不僅僅需要CPU,還需要很多其他資源,如記憶體啊,顯示卡啊,GPS啊,磁盤啊等等,統稱為程式的執行環境,也就是程式上下文。

并發的概念,排程器切換CPU給不同程序使用的速度非常快,于是在使用者看來程式是在同時運作,這就是并發,而實際上CPU在同一時刻隻在運作一個程序。并發隻是給人的假現象 ,原因就是由于cpu工作很快,不斷地loop感覺是同時發生,實際都是單個執行的。

  CPU程序無法同時刻共享,但是出現一定要共享CPU的需求呢?此時線程的概念就出現了。線程被包含在程序當中,程序的不同線程間共享CPU和程式上下文。(共享程序配置設定到的資源)

讀取上下文+執行程式+儲存上下文,即程序切換。

  如果這個CPU是單核的話,那麼在程序中的不同線程為了使用CPU核心,則會進行線程切換,但是由于共享了程式執行環境,這個線程切換比程序切換開銷少了很多。在這裡依然是并發,唯一核心同時刻隻能執行一個線程。

出現線程的原因就是由于程序切換需要大量的資源切換,線程卻還資源是共享的,切換速度很快,占用資源小,線程内容是隐私的,存儲一些上下文資訊,以及堆棧資訊,占用記憶體很小,切換很快,同一程序不同線程切換共享程序資源,切換迅速。

  如果這個CPU是多核的話,那麼程序中的不同線程可以使用不同核心,真正的并行出現了。多核才是并行,單核隻能說是并發,假并行

線程是CPU排程和配置設定的基本機關,一定要和 程序是作業系統進行資源配置設定(包括cpu、記憶體、磁盤IO等)的最小機關 差別清楚。有句話說CPU隻能看到線程,可以這麼了解,假設我是CPU,我閉着眼,作業系統排程器将一個程序配置設定給我之後,我拿到程序睜開眼,我看到的是什麼?我看到的是程序中的很多線程,那麼我現在能排程和配置設定的是什麼?程序?不行,因為我看不到其他程序,何來排程配置設定,隻能排程我看到的那些線程,如果我是4核的話,把線程ABCD配置設定到核心1234,其他的線程依然要等待配置設定,至于等待多久,如何配置設定,暫不在本文讨論範圍。于是線程是CPU排程和配置設定的基本機關。

 

作業系統記憶體管理子產品

 最後說一下作業系統記憶體管理子產品這裡做的事:在這之前,程式員需要為每個程式安排運作的空間,這裡的空間指的是記憶體的實體位址,但是這麼的問題就是,每個程式都要協商如何使用同一記憶體的不同空間,而且程式員還要關心底層記憶體配置設定問題。解決辦法就是,提出程序的概念,每個程序用一樣的虛拟位址空間,CPU上增加了MMU子產品負責轉換虛拟位址和實體位址,虛拟位址經過作業系統和MMU之後,虛拟位址會映射到不同的實體位址,不同的程序就能獲得各自獨立的實體記憶體空間。

  另外在有的作業系統裡,程序不是排程機關,線程是最基本的排程機關,排程器隻排程線程,不排程程序,如VxWorks。

  總結:

  1、單CPU中程序隻能是并發,多CPU計算機中程序可以并行。

  2、單CPU單核中線程隻能并發,單CPU多核中線程可以并行。

  3、無論是并發還是并行,使用者來看,看到的是多程序,多線程。

程序和線程

根本差別:程序是作業系統資源配置設定的基本機關,而線程是任務排程和執行的基本機關

在開銷方面:

  • 每個程序都有獨立的代碼和資料空間(程式上下文),程式之間的切換會有較大的開銷;
  • 線程可以看做輕量級的程序,同一類線程共享代碼和資料空間,每個線程都有自己獨立的運作棧和程式計數器(PC),線程之間切換的開銷小。

所處環境:在作業系統中能同時運作多個程序(程式);而在同一個程序(程式)中有多個線程同時執行(通過CPU排程,在每個時間片中隻有一個線程執行)

記憶體配置設定方面:系統在運作的時候會為每個程序配置設定不同的記憶體空間;而對線程而言,除了CPU外,系統不會為線程配置設定記憶體(線程所使用的資源來自其所屬程序的資源),線程組之間隻能共享資源。

包含關系:沒有線程的程序可以看做是單線程的,如果一個程序内有多個線程,則執行過程不是一條線的,而是多條線(線程)共同完成的;線程是程序的一部分,是以線程也被稱為輕權程序或者輕量級程序。

4核8線程實質

1核兩線程(實作超線程),線程執行仍然并發執發,假并行;

最後說下我們最熟悉的東西4核8線程和6核12線程;

每個機關時間内,一個CPU隻能處理一個線程(作業系統:thread),以這樣的機關進行,如果想要在一機關時間内處理超過一個線程是不可能的,除非是有兩個CPU的實體單元。

繼續閱讀