執行緒 程序 協程

2022-04-11 05:22:34 字數 1100 閱讀 2260

執行緒是作業系統中進行運算排程的最小單位。

執行緒被包含在程序之中,是程序中的實際運作單位。

一條執行緒指的是程序中乙個單一順序的控制流,乙個程序可以併發多個執行緒,每條執行緒並行執行不同的任務。

乙個執行緒是乙個execution context(執行上下文),即乙個cpu執行時所需要的一串指令。

每個獨立的執行緒有乙個程式執行的入口、順序執行序列和程式的出口。但是執行緒不能夠獨立執行,必須依存在應用程式(程序)中,由應用程式提供多個執行緒執行控制。

每個執行緒都有他自己的一組cpu暫存器,稱為執行緒的上下文,該上下文反映了執行緒上次執行該執行緒的cpu暫存器的狀態。

指令指標和堆疊指標暫存器是執行緒上下文中兩個最重要的暫存器,執行緒總是在程序得到上下文中執行的,這些位址都用於標誌擁有執行緒的程序位址空間中的記憶體。

執行上下文理解

假設你正在讀一本書,沒有讀完,你想休息一下,但是你想在回來時恢復到當時讀的具體進度。有乙個方法就是記下頁數、行數與字數這三個數值,這些數值就是execution context。

乙個程式的執行例項就是乙個程序。

每乙個程序提供之星程式所需的所有資源。(程序本質上是資源的集合)

乙個程序有乙個虛擬的位址空間、可執行的**、作業系統的介面、安全的上下文(啟動該程序的使用者和許可權等等)、唯一的程序id、環境變數、優先順序類、最小和最大的工作空間(記憶體空間),還要有至少乙個執行緒

每個程序啟動時都會最先產生乙個執行緒,即主線程。

同乙個程序中的執行緒共享同一記憶體空間,但是程序之間是獨立的

對主線程的修改可能會影響其他執行緒的行為,但是父程序的修改(除了刪除)不會影響其他子程序

執行緒是乙個上下文的執行指令,而程序是與運算相關的一簇資源

同乙個程序之間的程序之間可以直接通訊,但是進城之間的交流需要借助中間**來實現

建立新的執行緒很容易(啟動速度快),但是建立新的程序需要對父程序做一次複製

乙個執行緒可以操作同乙個程序的其他執行緒,但是程序只能操作其子程序

併發通常是指有多個任務需要同時進行,並行則是同乙個時刻有多個任務執行。

下面這個例子非常形象:

併發情況下是乙個老師在同一時間段輔助不同的人功課。並行則是好幾個老師分別同時輔助多個學生功課。

搞定python多執行緒和多程序

程序 執行緒 協程

多程序多執行緒的最終目地都是為了加快任務處理的時間,但是受限於cpu核數 只有多核才能實現並行,任務耗時 單核任務耗時 cpu核數 那麼在單核上執行多程序多執行緒是不是沒有用了,加快不了處理的速度了?答案肯定是不是的,不然這個東西設計出來太雞肋了,那它們加快處理的原理是什麼呢?乙個程序耗時 b程序耗...

程序 執行緒 協程

程序是系統資源分配的最小單位,系統由乙個個程序 程式 組成。一般情況下,包括文字區域 text region 資料區域 data region 和堆疊 stack region 檔案描述符表 程序每次開啟乙個檔案,系統就會在該程序的使用者檔案描述符表中分配乙個相應的表項,表項的索引返回給該程序,用於...

程序 執行緒 協程

程序的出現是為了更好的利用cpu資源使到併發成為可能。假設有兩個任務a和b,當a遇到io操作,cpu默默的等待任務a讀取完操作再去執行任務b,這樣無疑是對cpu資源的極大的浪費。聰明的老大們就在想若在任務a讀取資料時,讓任務b執行,當任務a讀取完資料後,再切換到任務a執行。注意關鍵字切換,自然是切換...