程序 執行緒 協程

2022-03-16 03:31:28 字數 1092 閱讀 2613

程序是系統資源分配的最小單位, 系統由乙個個程序(程式)組成。一般情況下,包括文字區域(text region)、資料區域(data region)和堆疊(stack region)。

檔案描述符表 : 程序每次開啟乙個檔案,系統就會在該程序的使用者檔案描述符表中分配乙個相應的表項,表項的索引返回給該程序,用於標誌該檔案,這個索引就是常說的檔案描述符。每個程序都有它獨立的描述符表。

因此程序的建立和銷毀都是相對於系統資源,所以是一種比較昂貴的操作。 程序有三個狀態:

等待態:等待某個事件的完成;

就緒態:等待系統分配處理器以便執行;

執行態:占有處理器正在執行。

程序是搶占式的爭奪cpu執行自身,而cpu單核的情況下同一時間只能執行乙個程序的**,但是多程序的實現則是通過cpu飛快的切換不同程序,因此使得看上去就像是多個程序在同時進行。

通訊問題:    由於程序間是隔離的,各自擁有自己的記憶體記憶體資源, 因此相對於執行緒比較安全, 所以不同程序之間的資料只能通過 ipc(inter-process communication) 進行通訊共享.

程序間的通訊有:管道、訊息佇列、共享儲存、訊號、套接字

同時多執行緒是不安全的,當乙個執行緒崩潰了,會導致整個程序也崩潰了,即其他執行緒也掛了, 但多程序而不會,乙個程序掛了,另乙個程序依然照樣執行。

程序切換分3步:

切換頁目錄以使用新的位址空間

切換核心棧

切換硬體上下文

而執行緒切換只需要第2、3步,因此程序的切換代價比較大

goroutine是乙個與其他goroutines 併發執行在同一位址空間的go函式或方法。乙個執行的程式由乙個或更多個goroutine組成。它與執行緒、協程、程序等不同。它是乙個goroutine。

建立的資源少(2k),使用的暫存器少;如同函式的 call/return 一樣,有自己的排程器(g-p-m)進行協作式排程(不是搶占式);基於使用者態執行緒執行,切換開銷低;

程序 執行緒 協程

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

執行緒 程序 協程

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

程序 執行緒 協程

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