程序和執行緒

2021-07-22 05:32:44 字數 907 閱讀 9507

電腦程式只不過是磁碟中可執行的二進位制(或者其他型別)的資料。它們只是在被讀取到記憶體中被作業系統呼叫的時候才開始它們的生命週期。

程序(有時候被稱為重量級程序)是程式的一次執行。每乙個程序都有自己的位址空間、記憶體、資料棧以及其他記錄起執行軌跡的輔助資料。作業系統管理其上執行的所有程序,並為這些程序公平的分配時間、程序也可以通過fork和spawn操作類完成其他的任務。不過各個程序有自己的記憶體空間、資料棧等,所以只能使用程序間通訊(interprocess communication, ipc),而不能直接共享資訊。

執行緒(有時候被稱為輕量級程序)和程序有些相似,不同的是,所有的執行緒執行在同乙個程序中, 共享相同的執行環境。他們可以被想象成實在主程序或者「主線程」中並行執行的「迷你程序」。

執行緒一般都是併發執行的。正式由於這種併發和資料共享的機制使得多個任務合作變為可能。實際上,在單cpu的系統中,真正的併發是不可能的,每個執行緒會被安排成每次只執行一小會兒,然後就把cpu讓出來,讓其他的執行緒去執行。在程序的整個執行過程中,每個執行緒都只做自己的事,在需要的時候跟其他的執行緒共享執行的結果。

當然,這樣的共享並不是完全沒有風險的。如果多個執行緒共同訪問同一片資料,則由於資料訪問的順序不一樣,有可能導致資料結果的不一致的問題,這叫做競態條件(race condition)。幸運的是,大多數的執行緒庫都帶有一系列的同步原語,來控制線程的執行和資料的訪問。

另乙個要注意的地方時,由於函式會在完成之前阻塞住,在沒有特別為多執行緒做修改的情況下,這種「貪婪」的函式會讓cpu的時間分配有所傾斜,導致各個執行緒分配到的時間可能不盡相同,不盡公平。

具體的關於執行緒和程序,可以參考《現代作業系統》第二章。

接下來一段時間會詳細的記錄關於執行緒和程序的相關知識點。

python核心程式設計(第二版)

執行緒和程序

標準的定義是 程序是執行緒的容器,乙個程序可於乙個或者多個執行緒,它是系統分配資源的基本單位 同乙個程序下,執行緒共享位址空降 已經開啟的檔案 訊號處理函式 報警訊號和其他,執行緒自己只保留程式計數器和棧。但是很遺憾的,這個只是教科書上的定義,實際情況是每個作業系統實現的作業系統特性不同,實現的方法...

程序和執行緒

乙個程序就是當前正在執行的乙個程式,包括程式的暫存器 程式計數器和變數的當前值。不同的程序擁有不同的位址空間。而執行緒可以理解為是程序中的控制流。同乙個程序內也就是說在同乙個位址空間內可以有多個控制流。也就是可以有多個線 程,他們共享位址空間。我們通常將程序視為是資源的集合,程序中有程式的正文 資料...

執行緒和程序

對於求職者,在面試的時候大多都會被問到 你對多執行緒了解麼?給我講講執行緒和程序的區別吧。在unix中,乙個程序可以理解為執行緒 位址空間 檔案描述符 資料,道破現實,其實就相當於老闆和員工,老闆就是程序,員工就是執行緒。老闆需要僱傭若干員工 執行緒 還要有辦公樓 位址空間 還要有若干的辦公裝置 檔...