1 0 併發程式設計 程序和執行緒簡介

2022-09-14 01:54:10 字數 1372 閱讀 5286

程序

程序是資源(cpu、記憶體等)分配的基本單位,它是程式執行時的乙個例項。程式執行時系統就會建立乙個程序,並為它分配資源,然後把該程序放入程序就緒佇列,程序排程器選中它的時候就會為它分配cpu時間,程式開始真正執行。

執行緒

執行緒是程式執行時的最小單位,它是程序的乙個執行流,是cpu排程和分派的基本單位,乙個程序可以由很多個執行緒組成,執行緒間共享程序的所有資源,每個執行緒有自己的堆疊和區域性變數。執行緒由cpu獨立排程執行,在多cpu環境下就允許多個執行緒同時執行。同樣多執行緒也可以實現併發操作,每個請求分配乙個執行緒來處理。

執行緒和程序各自有什麼區別和優劣呢?

程序是資源分配的最小單位,執行緒是程式執行的最小單位。

程序有自己的獨立位址空間,每啟動乙個程序,系統就會為它分配位址空間,建立資料表來維護**段、堆疊段和資料段,這種操作非常昂貴。而執行緒是共享程序中的資料的,使用相同的位址空間,因此cpu切換乙個執行緒的花費遠比程序要小很多,同時建立乙個執行緒的開銷也比程序要小很多。

執行緒之間的通訊更方便,同一程序下的執行緒共享全域性變數、靜態變數等資料,而程序之間的通訊需要以通訊的方式(ipc)進行。不過如何處理好同步與互斥是編寫多執行緒程式的難點。

但是多程序程式更健壯,多執行緒程式只要有乙個執行緒死掉,整個程序也死掉了,而乙個程序死掉並不會對另外乙個程序造成影響,因為程序有自己獨立的位址空間。

程序間通訊的方式——訊號、管道、訊息佇列、共享記憶體

1. 管道pipe:管道是一種半雙工的通訊方式,資料只能單向流動,而且只能在具有親緣關係的程序間使用。程序的親緣關係通常是指父子程序關係。

2. 命名管道fifo:有名管道也是半雙工的通訊方式,但是它允許無親緣關係程序間的通訊。

4. 訊息佇列messagequeue:訊息佇列是由訊息的鍊錶,存放在核心中並由訊息佇列識別符號標識。訊息佇列克服了訊號傳遞資訊少、管道只能承載無格式位元組流以及緩衝區大小受限等缺點。

5. 共享儲存sharedmemory:共享記憶體就是對映一段能被其他程序所訪問的記憶體,這段共享記憶體由乙個程序建立,但多個程序都可以訪問。共享記憶體是最快的 ipc 方式,它是針對其他程序間通訊方式執行效率低而專門設計的。它往往與其他通訊機制,如訊號兩,配合使用,來實現程序間的同步和通訊。

6. 訊號量semaphore:訊號量是乙個計數器,可以用來控制多個程序對共享資源的訪問。它常作為一種鎖機制,防止某程序正在訪問共享資源時,其他程序也訪問該資源。因此,主要作為程序間以及同一程序內不同執行緒之間的同步手段。

7. 套接字socket:套解口也是一種程序間通訊機制,與其他通訊機制不同的是,它可用於不同及其間的程序通訊。

8. 訊號 ( sinal ) : 訊號是一種比較複雜的通訊方式,用於通知接收程序某個事件已經發生。

併發程式設計 程序與執行緒

程序即正在執行的乙個過程。程序是對正在執行程式的乙個抽象。程序的概念起源於作業系統,是作業系統最核心的概念,也是作業系統提供的最古老也是最重要的抽象概念之一。作業系統的其他所有內容都是圍繞程序的概念展開的。ps 即使可以利用的cpu只有乙個 早期的計算機確實如此 也能保證支援 偽 併發的能力。將乙個...

執行緒,程序和併發

程序是什麼?程序是正在執行的程式 程序是正在計算機上執行的程式例項 程序是能分配給處理器並由處理器執行的實體。程序一般會包括指令集和系統資源集,這裡的指令集是指程式 這裡的系統資源集是指i o cpu 記憶體等。綜合起來,我們也可以理解程序是具有一定獨立功能的程式在關於某個資料集合上的一次執行活動,...

併發程式設計之程序與執行緒

2.2 並行與併發 2.3 應用 單核cpu下,多執行緒不能實際提高程式執行效率,只是為了能夠在不同的任務之間切換,不同執行緒輪流使用cpu,不至於乙個執行緒總占有cpu,別的執行緒沒法幹活。多核cpu可以並行跑多個執行緒,但能否提高程式執行效率還是要分情況的 1 有些任務,經過精心設計,將任務拆分...