程序 執行緒 協程

2022-07-11 08:33:11 字數 2070 閱讀 7904

程序-作業系統提供的抽象概念,是系統進行資源分配和排程的基本單位,是作業系統結構的基礎。

程式是指令、資料及其組織形式的描述,程序是程式的實體。

程式本身是沒有生命週期的,它只是存在磁碟上的一些指令,程式一旦執行就是程序。

程序-作業系統提供的抽象概念,是系統進行資源分配和排程的基本單位,是作業系統結構的基礎。程式是指令、資料及其組織形式的描述,程序是程式的實體。程式本身是沒有生命週期的,它只是存在磁碟上的一些指令,程式一旦執行就是程序。

作業系統對程序的控制和管理通過pcb(processing control block),pcb通常是系統記憶體占用區中的乙個連續存區,它存放著作業系統用於描述程序情況及控制程序執行所需的全部資訊(程序標識號,程序狀態,程序優先順序,檔案系統指標以及各個暫存器的內容等),程序的pcb是系統感知程序的唯一實體。

乙個程序至少具有5種基本狀態:初始態、執行狀態、等待(阻塞)狀態、就緒狀態、終止狀態

程序間的切換

無論是在多核還是單核系統中,乙個cpu看上去都像是在併發的執行多個程序,這是通過處理器在程序間切換來實現的。

作業系統對把cpu控制權在不同程序之間交換執行的機制成為上下文切換(context switch),即儲存當前程序的上下文,恢復新程序的上下文,然後將cpu控制權轉移到新程序,新程序就會從上次停止的地方開始。因此,程序是輪流使用cpu的,cpu被若干程序共享,使用某種排程演算法來決定何時停止乙個程序,並轉而為另乙個程序提供服務。

1.單核cpu雙程序的情況

程序直接特定的機制和遇到i/o中斷的情況下,進行上下文切換,輪流使用cpu資源

2.雙核cpu雙程序的情況 

每乙個程序獨佔乙個cpu核心資源,在處理i/o請求的時候,cpu處於阻塞狀態

程序間資料共享

系統中的程序與其他程序共享cpu和主存資源,為了更好的管理主存,現在系統提供了一種對主存的抽象概念,即為虛擬儲存器(vm)。它是乙個抽象的概念,它為每乙個程序提供了乙個假象,即每個程序都在獨佔地使用主存。

虛擬儲存器主要提供了三個能力: 

由於程序擁有自己獨佔的虛擬位址空間,cpu通過位址翻譯將虛擬位址轉換成真實的實體地址,每個程序只能訪問自己的位址空間。因此,在沒有其他機制(程序間通訊)的輔助下,程序之間是無法共享資料的

執行緒-也是作業系統提供的抽象概念,是程式執行中乙個單一的順序控制流程,是程式執行流的最小單元,是處理器排程和分派的基本單位。

乙個程序可以有乙個或多個執行緒,同一程序中的多個執行緒將共享該程序中的全部系統資源,如虛擬位址空間,檔案描述符和訊號處理等等。

但同一程序中的多個執行緒有各自的呼叫棧和執行緒本地儲存(如下圖所示)。

和程序一樣,執行緒同樣有五種狀態:初始態、執行狀態、等待(阻塞)狀態、就緒狀態和終止狀態,執行緒之間的切換和程序一樣也需要上下文切換。

程序和執行緒之間有許多相似的地方,那它們之間到底有什麼區別呢?

程序 vs 執行緒

總之,多程序程式安全性高,程序切換開銷大,效率低;多執行緒程式維護成本高,執行緒切換開銷小,效率高。(python的多執行緒是偽多執行緒,下文中將詳細介紹)

協程(coroutine,又稱微執行緒)是一種比執行緒更加輕量級的存在,協程不是被作業系統核心所管理,而完全是由程式所控制。協程與執行緒以及程序的關係見下圖所示。

協程適用於io阻塞且需要大量併發的場景,當發生io阻塞,由協程的排程器進行排程,通過將資料流yield掉,並且記錄當前棧上的資料,阻塞完後立刻再通過執行緒恢復棧,並把阻塞的結果放到這個執行緒上去執行。

什麼是dma

dma(direct memory access)是系統中的乙個特殊裝置,它可以協調完成記憶體到裝置間的資料傳輸,中間過程不需要cpu介入。

以檔案寫入為例:

程序 執行緒 協程

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

程序 執行緒 協程

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

執行緒 程序 協程

執行緒是作業系統中進行運算排程的最小單位。執行緒被包含在程序之中,是程序中的實際運作單位。一條執行緒指的是程序中乙個單一順序的控制流,乙個程序可以併發多個執行緒,每條執行緒並行執行不同的任務。乙個執行緒是乙個execution context 執行上下文 即乙個cpu執行時所需要的一串指令。每個獨立...