多線程和多進程效率的對比


那么線程和進程究竟是怎么樣的效率的關系呢?  

答:首先:

  1、進程是程序的一次執行。

  2、進程是資源分配的基本單位(調度單位)。

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

  4、在單CPU計算機中,有一個資源是無法被多個程序並行使用的:CPU。

  5、操作系統調度器:拆分CPU為一段段時間的運行片,輪流分配給不同的程序。

  6、操作系統內存管理模塊:管理物理內存、虛擬內存相關的事務。

 

由於CPU同時刻只能執行一個進程,如果我們不加以控制的話,一個進程可能使用CPU直到運行結束,於是出現了操作系統調度器,而進程也成為了調度單位。

 

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

 

  在這里就出現了並發的概念,調度器切換CPU給不同進程使用的速度非常快,於是在使用者看來程序是在同時運行,這就是並發,而實際上CPU在同一時刻只在運行一個進程。

 

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

 

  單CPU進行進程調度的時候,需要讀取上下文+執行程序+保存上下文,即進程切換。

 

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

 

  如果這個CPU是多核的話,那么進程中的不同線程可以使用不同核心,真正的並行出現了。

 

  線程是CPU調度和分配的基本單位,一定要和 進程是操作系統進行資源分配(包括cpu、內存、磁盤IO等)的最小單位 區別清楚。有句話說CPU只能看到線程,可以這么理解,假設我是CPU,我閉着眼,操作系統調度器將一個進程分配給我之后,我拿到進程睜開眼,我看到的是什么?我看到的是進程中的很多線程,那么我現在能調度和分配的是什么?進程?不行,因為我看不到其他進程,何來調度分配,只能調度我看到的那些線程,如果我是4核的話,把線程ABCD分配到核心1234,其他的線程依然要等待分配,至於等待多久,如何分配,暫不在本文討論范圍。於是線程是CPU調度和分配的基本單位。

    結論:    計算io操作密集型的代碼多線程效率更高,因為線程創建要比進程創建開銷少

       但是計算密集型的代碼多 那么進程操作更快,因為多進可以應用多核技術

 

2020-07-05


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM