1. 程式人生 > >作業系統——程序與執行緒的區別以及如何選擇

作業系統——程序與執行緒的區別以及如何選擇

1.定義

在對執行緒和程序進行比較之前,我們先看一下它們的定義。

程序:是具有一定獨立功能的程式關於某個資料集合上的一次執行活動,程序是系統進行資源分配和排程的一個獨立單位,是資源分配的最小單位。

執行緒:是程序的一個實體,是CPU排程和分派的基本單位,它是比程序更小的能獨立執行的基本單位,是程式執行的最小單位.

2.二者之間的關係

(1)一個執行緒可以建立和撤銷另一個執行緒;同一個程序中的多個執行緒之間可以併發執行.

(2)沒有執行緒的程序可以看做是單執行緒的,如果一個程序內有多個執行緒,則執行過程不是一條線的,而是多條線(執行緒)共同完成的;執行緒是程序的一部分,所以執行緒也被稱為輕權程序或者輕量級程序。

(3)相對程序而言,執行緒是一個更加接近於執行體的概念,它可以與同進程中的其他執行緒共享資料,但擁有自己的棧空間,擁有獨立的執行序列

3.二者之間的區別

二者的區別主要體現在一下幾個方面:

第一:作業系統資源管理方式不同程序有獨立的地址空間,一個程序崩潰後,在保護模式下不會對其它程序產生影響,而執行緒只是一個程序中的不同執行路徑。執行緒有自己的堆疊和區域性變數,但執行緒之間沒有單獨的地址空間,一個執行緒死掉就等於整個程序死掉,所以多程序的程式要比多執行緒的程式健壯,但在程序切換時,耗費資源較大,效率要差一些。但對於一些要求同時進行並且又要共享某些變數的併發操作,只能用執行緒,不能用程序。

第二:通訊機制不同(獨立性)正因為程序之間互不干擾,相互獨立,程序的通訊機制相對很複雜,譬如管道,訊號,訊息佇列,共享記憶體,套接字等通訊機制,而屬於同一個程序的所有執行緒共享該程序的所有資源,通訊機制很方便。。

第三:包含關係。執行緒必定也只能屬於一個程序,而程序可以擁有多個執行緒而且至少擁有一個執行緒;這一點可以參照上文的第二小節。

第四:程式結構不同。舉一個簡明易懂的列子:當我們使用程序的時候,我們不自主的使用if else巢狀來判斷pid,使得程式結構繁瑣,但是當我們使用執行緒的時候,基本上可以甩掉它,當然程式內部執行功能單元需要使用的時候還是要使用,所以執行緒對程式結構的改善有很大幫助。

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

4.二者的優缺點

執行緒執行開銷小,速度快,但不利於資源的管理和保護;

程序執行開銷大,穩定安全,利於資源的管理和保護。

5.如何選擇

程序與執行緒的選擇取決以下幾點:

1、需要頻繁建立銷燬的優先使用執行緒,因為對程序來說建立和銷燬一個程序代價是很大的。

2、執行緒的切換速度快,所以在需要大量計算,切換頻繁時用執行緒,還有耗時的操作使用執行緒可提高應用程式的響應

3、因為對CPU系統的效率使用上執行緒更佔優,所以多機分佈用程序,多核分佈用執行緒;

4、並行操作時使用執行緒,如C/S架構的伺服器端併發執行緒響應使用者的請求;

5、需要更穩定安全時,適合選擇程序;需要速度時,選擇執行緒。