1、程序
#程序(process,有時被稱為重量級程序)是程式的一次執行。每個程序都有自己的位址空間、記憶體、資料棧以及記錄執行軌跡的輔助資料,作業系統管理執行的所有程序,並為這些程序公平分配時間。程序可以通過fork和spawn操作完成其他任務。因為各個程序有自己的記憶體空間、資料棧等,所以只能使用程序間通訊(ipc),而不能直接共享資訊。
2、執行緒
#執行緒(thread,有時被稱為輕量級程序)跟程序有些相似,不同的是所有執行緒執行在同乙個程序中,共享執行環境。
#執行緒有開始、順序執行和結束3部分,有乙個自己的指令指標,記錄執行到什麼地方。執行緒的執行可能被搶占(中斷)或暫時被掛起(睡眠),從而讓其他執行緒執行,這叫作讓步。乙個執行緒中的各個執行緒之間共享同一片資料空間,所以執行緒之間可以比程序之間更方便地共享資料和相互通訊。
#執行緒一般是併發執行的。正是由於這種並行和資料共享的機制,使得多個任務的合作變得可能。實際上,在單cpu系統中,真正的併發並不可能,每個執行緒會被安排成每次只執行一小會兒,然後就把cpu讓出來,讓其他執行緒執行。
#在程序的整個執行過程中,每個執行緒都只會做自己的事,需要時再跟其他執行緒共享執行結果,。多個執行緒共同訪問同一片資料不是完全沒有危險的,由於資料訪問的順序不一樣,因此有可能導致資料結果不一致的問題,這叫作競態條件。大多數執行緒庫都帶有一系列同步原語,用於控制線程的執行和資料的訪問。
3、多執行緒與多程序
#對於「多工」這個詞,相信讀者不會是第一次看見,現在的操作(如mac os x、unix、linux、windows等)都支援「多工」作業系統。
#什麼叫「多工」呢?簡單地說,就是系統可以同事執行多個任務。比如,一邊用瀏覽器上網,一邊用雲**,一邊聊天,這就是多工。此時手頭已經有3個任務在執行了。如果檢視任務管理器,可以看到還有很多任務悄悄在後台執行著,只是桌面沒有顯示出來而已。
#對於作業系統來說,乙個任務就是乙個程序,開啟多個任務就是多程序。
#有些程序不止可以同時做一件事情,比如work可以同時打字、拼寫檢查、列印等。在乙個程序內部,要同時做多件事,就需要同時執行多個執行緒。
#多執行緒類似於同時執行多個不同的程式,多執行緒執行有以下3個優點:
①、使用執行緒可以把佔據長時間的程式中的任務放到後台去處理。
②、使用者介面可以更加吸引人,比如使用者單擊乙個按鈕,用於觸發某些事件的處理,可以彈出乙個進度條顯示處理的進度。
③、程式的執行速度可能加快。
#在實現一些等待任務(如使用者輸入、檔案讀寫和網路收發資料等)時,使用多執行緒更加有用。在這種情況下,我們可以釋放一些珍貴資源(如記憶體占用等)。
#執行緒在執行過程中與程序還是有區別的,每個獨立執行緒有乙個程式執行的入口、順序執行序列和程式的出口。但是執行緒不是獨立執行,必須依存在程序中,由程序提供多個執行緒執行控制。
#由於每個程序至少要幹一件事情,因此乙個程序至少有乙個執行緒,當然如word這種複雜的程序可以有多個程序,多個執行緒可以同時執行。多執行緒的執行方式和多程序是一樣的,也是由作業系統在多個執行緒之間快速切換,讓每個執行緒都短暫交替執行,看起來就像同時執行一樣。當然,真正同時執行多執行緒需要多核cpu才能實現。
#我們前面編寫的所有python程式都是執行單任務的程序,也就是只有乙個執行緒。如果我們要同時執行多個任務,該如何操作?
#有兩種解決方法:一種方法是啟動多個程序。每個程序雖然只有乙個執行緒,但多個程序可以一起執行多個任務。另一種方法是啟動乙個程序,在乙個程序內啟動多個執行緒,這樣多個執行緒也可以一起執行多個任務。
#當然,還有第3種方法,就是啟動多個程序,每個程序再啟動多個執行緒,這樣同時執行的任務就更多了,不過這種模型過於複雜,實際很少採用。
#同時執行多個任務時,各個任務之間並不是沒有關聯的,而是需要相互通訊和協調,有時任務1必須暫停任務等待任務2完成後才能繼續執行有時任務3和任務4不能同時執行。多程序和多執行緒程式的複雜度遠遠高於我們前面寫的單程序、單執行緒的程式。
#總而言之,多執行緒是多個相互關聯的執行緒的組合,多執行緒是多個互相獨立的程序的組合。執行緒是最小的執行單元,程序至少由乙個執行緒組成。
執行緒和程序
標準的定義是 程序是執行緒的容器,乙個程序可於乙個或者多個執行緒,它是系統分配資源的基本單位 同乙個程序下,執行緒共享位址空降 已經開啟的檔案 訊號處理函式 報警訊號和其他,執行緒自己只保留程式計數器和棧。但是很遺憾的,這個只是教科書上的定義,實際情況是每個作業系統實現的作業系統特性不同,實現的方法...
程序和執行緒
乙個程序就是當前正在執行的乙個程式,包括程式的暫存器 程式計數器和變數的當前值。不同的程序擁有不同的位址空間。而執行緒可以理解為是程序中的控制流。同乙個程序內也就是說在同乙個位址空間內可以有多個控制流。也就是可以有多個線 程,他們共享位址空間。我們通常將程序視為是資源的集合,程序中有程式的正文 資料...
執行緒和程序
對於求職者,在面試的時候大多都會被問到 你對多執行緒了解麼?給我講講執行緒和程序的區別吧。在unix中,乙個程序可以理解為執行緒 位址空間 檔案描述符 資料,道破現實,其實就相當於老闆和員工,老闆就是程序,員工就是執行緒。老闆需要僱傭若干員工 執行緒 還要有辦公樓 位址空間 還要有若干的辦公裝置 檔...