1. 程式人生 > 程式設計 >區分python中的程序與執行緒

區分python中的程序與執行緒

今天整理的文章是給大家梳理Python的程序與執行緒的區別,沒什麼程式碼,希望大家能清楚知道他們的區別,什麼情況用執行緒,什麼情況用程序做到心中有數,希望大家能熟練掌握.

程序的基本概念

概念

程序就是一個程式在一個數據集上的一次動態執行過程。程序一般由程式、資料集、程序控制塊三部分組成。我們編寫的程式用來描述程序要完成哪些功能以及如何完成;資料集則是程式在執行過程中所需要使用的資源;程序控制塊用來記錄程序的外部特徵,描述程序的執行變化過程,系統可以利用它來控制和管理程序,它是系統感知程序存在的唯一標誌。

執行緒的基本概念

概念

執行緒是程序中執行運算的最小單位,是程序中的一個實體,是被系統獨立排程和分派的基本單位,執行緒自己不擁有系統資源,只擁有一點在執行中必不可少的資源,但它可與同屬一個程序的其它執行緒共享程序所擁有的全部資源。一個執行緒可以建立和撤消另一個執行緒,同一程序中的多個執行緒之間可以併發執行。

好處

  • 易於排程。
  • 提高併發性,通過執行緒可方便有效地實現併發性。程序可建立多個執行緒來執行同一程式的不同部分。
  • 開銷少,建立執行緒比建立程序要快,所需開銷很少

程序的基本狀態及狀態之間的關係

狀態:執行、阻塞、掛起阻塞、就緒、掛起就緒

狀態之間的轉換:

  1. 準備就緒的程序,被CPU排程執行,變成執行態;
  2. 執行中的程序,進行I/O請求或者不能得到所請求的資源,變成阻塞態;
  3. 執行中的程序,程序執行完畢(或時間片已到),變成就緒態;
  4. 將阻塞態的程序掛起,變成掛起阻塞態,當導致程序阻塞的I/O操作在使用者重啟程序前完成(稱之為喚醒),掛起阻塞態變成掛起就緒態,當用戶在I/O操作結束之前重啟程序,掛起阻塞態變成阻塞態;
  5. 將就緒(或執行)中的程序掛起,變成掛起就緒態,當該程序恢復之後,掛起就緒態變成就緒態;

程序和執行緒的關係:

  • 一個執行緒只能屬於一個程序,而一個程序可以有多個執行緒,但至少有一個執行緒。
  • 資源分配給程序,同一程序的所有執行緒共享該程序的所有資源。
  • 處理機分給執行緒,即真正在處理機上執行的是執行緒
  • 執行緒在執行過程中,需要協作同步。不同程序的執行緒間要利用訊息通訊的辦法實現同步。執行緒是指程序內的一個執行單元,也是程序內的可排程實體.

程序與執行緒的區別:

  • 執行方式不同

程序不能單獨執行,它只是資源的集合。
程序要操作CPU,必須要先建立一個執行緒。

所有在同一個程序裡的執行緒,是同享同一塊程序所佔的記憶體空間。

  • 關係

程序中第一個執行緒是主執行緒,主執行緒可以建立其他執行緒;其他執行緒也可以建立執行緒;執行緒之間是平等的。
程序有父程序和子程序,獨立的記憶體空間,唯一的識別符號:pid。

  • 速度

啟動執行緒比啟動程序快
執行執行緒和執行程序速度上是一樣的,沒有可比性
執行緒共享記憶體空間,程序的記憶體是獨立的。

  • 建立

父程序生成子程序,相當於複製一份記憶體空間,程序之間不能直接訪問
建立新執行緒很簡單,建立新程序需要對父程序進行一次複製
一個執行緒可以控制和操作同級執行緒裡的其他執行緒,但是程序只能操作子程序。

  • 互動

同一個程序裡的執行緒之間可以直接訪問。
兩個程序想通訊必須通過一箇中間代理來實現。

  • 排程

執行緒作為排程和分配的基本單位,程序作為擁有資源的基本單位

  • 併發性

不僅程序之間可以併發執行,同一個程序的多個執行緒之間也可併發執行

  • 擁有資源:

程序是擁有資源的一個獨立單位,執行緒不擁有系統資源,但可以訪問隸屬於程序的資源.

  • 系統開銷:

在建立或撤消程序時,由於系統都要為之分配和回收資源,導致系統的開銷明顯大於建立或撤消執行緒時的開銷。

以上就是區分python中的程序與執行緒的詳細內容,更多關於python程序與執行緒的資料請關注我們其它相關文章!