你能講清楚操作系統中的 線程和進程 嗎?

你能講清楚操作系統中的 線程和進程 嗎?

寫在前面:
筆者晚上花了些功夫學習梳理了一下 進程和線程 ,現在通過概念+生活例子+自己一針見血的描述 產出這篇文章,全文避免使用生硬的術語,儘量用通俗易懂的話把二者講明白。

進程與線程

什麼是進程?

  • 很精闢的一句話:一個進程就是一個程序的運行實例。 比如你電腦任務管理器中的某個正在運行的exe程序就是一個進程。
  • 詳細解釋:當你啓動一個程序的時候,操作系統爲該程序分配一塊地址空間,用於存放代碼、數據和執行任務的主線程,這個運行環境就是進程 。每一個進程至少有 5 種基本狀態,它們是:初始態,執行態,等待狀態,就緒狀態,終止狀態。

什麼是多進程?

用生活例子來比對:你是不是經常在QQ聊天的時候還聽網易雲的歌曲啊?對操作系統而言多進程即操作系統中同時運行的多個程序,容許多個資源集合同時被處理

爲什麼要引入進程?

在回答這個問題之前,我們不妨再通過實際生活中的例子談起。你的電腦上肯定安裝了各種軟件吧!這些軟件運行時需要給它們分配不同的資源(內存、CPU等),它們佔用各自內存的同時,互相獨立又互相競爭。
配圖

這是怎麼做到的呢?因爲進程的存在隔離了不同的資源,讓這些程序管理着各自的運行,如果要給進程取個外號,它就是資源分組大師。 操作系統裏確實也是這樣定義進程的 :

進程:計算機中已運行的程序,是系統進行資源分配和調度的基本單位,是操作系統結構的基礎


什麼是線程?

  • 進程中的一個執行任務(控制單元),負責當前進程中程序的執行。
  • 換句話說:線程是進程的一個實體,是進程的一條執行路徑

什麼是多線程

可以用開篇講的給女朋友做飯的例子來看多線程,雖然我沒有女朋友哈(╥╯﹏╰╥)ง 顧名思義多線程即 在同一個進程中同時運行的多個任務

線程的屬性

  • 有標識符ID
  • 有自己的棧和指針
  • 共享所在進程的地址空間和其他資源
  • 有狀態及狀態轉換,因此需要提供一些狀態轉換操作
  • 不運行時需要保存上下文環境,因此需要程序計數器等寄存器

爲什麼引入線程?

和前面提到的進程放在一起比較:進程是從資源分組的角度出發的,線程則是從執行的角度出發的。進程給程序分配好的資源怎麼利用呢?這時候就要靠線程來處理資源利用
進程存在下面三個痛點:

  1. 進程切換的代價、開銷相對較大
  2. 在一個進程內也需要並行執行多個程序,實現不同功能
  3. 進程有時候性能較低

引入線程出於以下三個方面的考慮:

  1. 應用的需求: 有些需求只能通過線程機制去實現。比如運行的QQ是一個進程的話,你要和別人發起聊天,還要在QQ上面下載文件,這種需求不依靠線程是實現不了的

  2. 開銷的考慮: 在進程內創建、終止線程比創建、終止進程快。同一進程內的線程間的切換比進程切換快,尤其是用戶級線程間的切換。線程之間 互相通信無須通過內核(同一進程的線程共享內存和文件)

  3. 性能的考慮: 多個線程中,任務功能不同(有的負責計算,有的負責I/O ),如果有多個處理器,一個進程就可以有很多任務同時在執行


爲什麼使用多進程與多線程?

  1. 使用多進程可以在一個時間段內執行多個任務,並且可以提高CPU的使用率
  2. 多線程是爲了同步完成多項任務,不是爲了提高運行效率,而是爲了提高資源使用效率來提高系統的效率。CPU一次只執行一個線程,線程的執行有隨機性,線程多就會有更高的機率搶到CPU的執行權。

說到這個我就想到了這幾天鬧得沸沸揚揚的一件事兒:PanDownload電腦端作者被捕,原因就是PanDownload是使用多線程的方式下載百度雲資源的,而這樣做是違法的

進程與線程的區別

  • 進程與線程根本區別(角色定位): 進程是操作系統資源分配的基本單位,而線程則是任務調度和執行的基本單位

  • 定義上: 進程是一個程序的運行實例,線程是進程的一個執行路徑

  • 資源共享上: 進程之間不能共享資源,而線程共享進程所在地址空間和其他資源,同時線程有自己的棧和棧指針,程序計數器等寄存器

  • 獨立性區別: 進程有自己獨立的地址空間,線程則沒有,且線程依附於進程

  • 開銷方面: 進程切換的開銷大,線程相對較小


寫在最後: 上面這些內容大致地講解了一些進程與線程相關知識,其實有關線程和進程還可以講很多很多,比如進程與線程的創建方式、實現原理等等… 但是我們目的不在此,就先略過了。以上內容是我結合資料的一些膚淺理解,希望本文能對大家理解進程與線程有所幫助,如有描述不準確的地方,歡迎指正!
在這裏插入圖片描述

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