進程、線程與程序之間的區別(用蛋炒飯做比喻)

進程與線程是什麼,它們之間又有peach區別

先來整點學術類的好活,在準備說句人話

1. 進程與線程的概念(進程是各種資源的集合,線程則是在CPU上被調度執行的實體)

吐槽一下:其實我在看《現代操作系統》這本書裏面沒有特別明確提出進程與線程的概念或者是定義,反而《深入理解計算系統》(這本書是講計算機組成原理和計算機體系結構的,我好多同學都弄混了)描述的比較清晰一點。

  1. 進程(process):在構造應用級別的併發程序中,每個邏輯控制流都是一個進程,進程同時也是一個容納了運行一個程序所需要所有信息的容器,由內核來調度和維護,與每個進程相關的是地址空間。它是操作系統調配資源的最小單位。與單純的程序不一樣,他多了一些什麼地址空間啊、程序計數器等亂七八糟的東西,下面會比較詳細一點。
  2. 線程(thread):線程就是運行在進程上下文中的邏輯控制流,是進程內部執行的一個分支,由內核進行調度。它是任務調動和執行的基本單位。每個線程都有它自己的線程上下文,包括一個唯一的整數線程ID(Thread ID,TID)、棧、棧指針、程序計數器、通用目的寄存器和條件碼。所有的運行在一個進程裏的線程共享該進程的整個虛擬地址空間。

這兩段裏面反覆提及的內核是個很複雜的概念,內核不太準確的說法:內核也是一段程序,不過很底層,底層到電路的那種。CSDN博主小蝦米_2018的《淺析操作系統與操作系統內核》,網址:https://blog.csdn.net/qq_22847457/article/details/89203593

2. 進程與線程的關係

在這裏插入圖片描述

3. 進程、程序、線程的區別(用蛋炒飯做比方)

程序告訴你怎麼炒,進程就是整個炒的過程,線程就是炒的時候換大小火,程序計數器地址空間就是蛋。

在這裏插入圖片描述

3.1 來開始炒飯

加油加蛋加醬油,然後顛勺換火的一整個過程叫進程。

  1. 第一步(這種純文字描述就是程序,具體運作進程):將火腿切片、胡蘿蔔切丁,蔥切末,雞蛋打散。
    蔥花、雞蛋、火腿丁、胡蘿蔔丁就是程序計數器、寄存器之類亂七八糟的的東西,地址空間應該算是裝飯的碗
    在這裏插入圖片描述
  2. 第二步(程序):鍋內熱油,蛋液倒入鍋中後快炒,炒均後收幹出鍋(這種很細微的操作就屬於線程)。
    在這裏插入圖片描述
  3. 第三步:鍋內熱油,放蔥末爆香,然後加入火腿片、蘿蔔丁,快速煸炒5分鐘後倒入米飯,炒散均勻。(細節操作屬於線程)
    在這裏插入圖片描述
  4. 第四步:飯炒均勻後加入雞蛋,再加入醬油調味,翻炒均勻後即可出鍋。(我覺得還是點個外賣比較香,順手再來一杯歡樂水)
    在這裏插入圖片描述

3.2 開飯了,記得順手給自己來一杯卡布奇諾(lbwnb)

4. 進程與線程在消耗資源方面的區別

  1. 進程切換與線程切換的開銷:每個進程都有獨立的邏輯控制流、地址空間和程序運行所需要的信息,因此程序之間的切換會有較大的開銷;線程可以看做輕量級的進程,同一類線程共享地址空間,每個線程都有自己相對於其他線程獨立的運行棧和程序計數器,因此線程之間切換的開銷小。
  2. 所處環境:在操作系統中能同時運行多個進程,而在同一個進程中也可以有多個線程同時執行。
  3. 內存分配:系統在運行的時候會爲每個進程分配不同的地址空間;而對線程而言,除了CPU外,系統不會爲線程分配內存,線程組之間只能共享進程所有的地址空間。

5. 爲什麼有了進程還要選擇線程

  1. 由於線程比進程更加輕量級,所以它們比進程更容易(即更快)建立,也更容易撤銷。在許多系統中,創建了一個線程比較創建一個進程要快10-100倍。在有大量線程需要動態和快速修改的時候,這一點十分重要。
  2. 通過將這些應用程序分解成可以準並行運行的多個順序線程,使得程序設計模型相對而言比較簡單一些。
  3. 若多個線程都是CPU密集型的,那麼並不能獲得性上的增加,但是如果存在着大量的計算和大量的I/O處理,擁有多個線程允許這些活動彼此重疊進行,而會加快應用程序的執行速度。
  4. 在多CPU系統中,多線程是有益的,在這樣的系統中,真正的並行有了實現的可能。

6. 參考資料

  1. CSDN博主kingdoooom的《進程和線程的主要區別(總結)》,網址:https://blog.csdn.net/kuangsonghan/article/details/80674777?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task

  2. CSDN博主小蝦米_2018的《淺析操作系統與操作系統內核》,網址:https://blog.csdn.net/qq_22847457/article/details/89203593

  3. 簡調視頻:蛋炒飯的做法 (這個屬於隨手一搜)

  4. 深入理解計算機系統(原書第三版)P682-768(第十二章節:併發編程)

  5. 現代操作系統(原書第四版)P48-P102(第二章:進程與線程),P22(操作系統的概念1.5.1進程)

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章