區分python中的程序與執行緒
今天整理的文章是給大家梳理Python的程序與執行緒的區別,沒什麼程式碼,希望大家能清楚知道他們的區別,什麼情況用執行緒,什麼情況用程序做到心中有數,希望大家能熟練掌握.
程序的基本概念
概念
程序就是一個程式在一個數據集上的一次動態執行過程。程序一般由程式、資料集、程序控制塊三部分組成。我們編寫的程式用來描述程序要完成哪些功能以及如何完成;資料集則是程式在執行過程中所需要使用的資源;程序控制塊用來記錄程序的外部特徵,描述程序的執行變化過程,系統可以利用它來控制和管理程序,它是系統感知程序存在的唯一標誌。
執行緒的基本概念
概念
執行緒是程序中執行運算的最小單位,是程序中的一個實體,是被系統獨立排程和分派的基本單位,執行緒自己不擁有系統資源,只擁有一點在執行中必不可少的資源,但它可與同屬一個程序的其它執行緒共享程序所擁有的全部資源。一個執行緒可以建立和撤消另一個執行緒,同一程序中的多個執行緒之間可以併發執行。
好處
- 易於排程。
- 提高併發性,通過執行緒可方便有效地實現併發性。程序可建立多個執行緒來執行同一程式的不同部分。
- 開銷少,建立執行緒比建立程序要快,所需開銷很少
程序的基本狀態及狀態之間的關係
狀態:執行、阻塞、掛起阻塞、就緒、掛起就緒
狀態之間的轉換:
- 準備就緒的程序,被CPU排程執行,變成執行態;
- 執行中的程序,進行I/O請求或者不能得到所請求的資源,變成阻塞態;
- 執行中的程序,程序執行完畢(或時間片已到),變成就緒態;
- 將阻塞態的程序掛起,變成掛起阻塞態,當導致程序阻塞的I/O操作在使用者重啟程序前完成(稱之為喚醒),掛起阻塞態變成掛起就緒態,當用戶在I/O操作結束之前重啟程序,掛起阻塞態變成阻塞態;
- 將就緒(或執行)中的程序掛起,變成掛起就緒態,當該程序恢復之後,掛起就緒態變成就緒態;
程序和執行緒的關係:
- 一個執行緒只能屬於一個程序,而一個程序可以有多個執行緒,但至少有一個執行緒。
- 資源分配給程序,同一程序的所有執行緒共享該程序的所有資源。
- 處理機分給執行緒,即真正在處理機上執行的是執行緒
- 執行緒在執行過程中,需要協作同步。不同程序的執行緒間要利用訊息通訊的辦法實現同步。執行緒是指程序內的一個執行單元,也是程序內的可排程實體.
程序與執行緒的區別:
- 執行方式不同
程序不能單獨執行,它只是資源的集合。
程序要操作CPU,必須要先建立一個執行緒。
- 關係
程序中第一個執行緒是主執行緒,主執行緒可以建立其他執行緒;其他執行緒也可以建立執行緒;執行緒之間是平等的。
程序有父程序和子程序,獨立的記憶體空間,唯一的識別符號:pid。
- 速度
啟動執行緒比啟動程序快
執行執行緒和執行程序速度上是一樣的,沒有可比性
執行緒共享記憶體空間,程序的記憶體是獨立的。
- 建立
父程序生成子程序,相當於複製一份記憶體空間,程序之間不能直接訪問
建立新執行緒很簡單,建立新程序需要對父程序進行一次複製
一個執行緒可以控制和操作同級執行緒裡的其他執行緒,但是程序只能操作子程序。
- 互動
同一個程序裡的執行緒之間可以直接訪問。
兩個程序想通訊必須通過一箇中間代理來實現。
- 排程
執行緒作為排程和分配的基本單位,程序作為擁有資源的基本單位
- 併發性
不僅程序之間可以併發執行,同一個程序的多個執行緒之間也可併發執行
- 擁有資源:
程序是擁有資源的一個獨立單位,執行緒不擁有系統資源,但可以訪問隸屬於程序的資源.
- 系統開銷:
在建立或撤消程序時,由於系統都要為之分配和回收資源,導致系統的開銷明顯大於建立或撤消執行緒時的開銷。
以上就是區分python中的程序與執行緒的詳細內容,更多關於python程序與執行緒的資料請關注我們其它相關文章!