1. 程式人生 > >程序與執行緒的區別與聯絡

程序與執行緒的區別與聯絡

這兩天學習作業系統,發現程序跟執行緒真的有很複雜的關係,下面我就程序與執行緒的聯絡及區別總結一下學習到的。

概念:

程序:程序是一個具有獨立功能的程式關於某個資料集合的一次執行活動。程序是擁有資源和獨立排程的基本單位,程序是一個可擁有資源的獨立單位,程序能夠獨立執行。引入程序是為了使多個程式能併發執行,以提高資源利用率和系統吞吐量。程序之間的關係是相互獨立與相互制約。程序同步的兩種關係是,同步和互斥。

程序有一個時空開銷的弊端(也就是程序之間的切換太過頻繁會造成一定的資源浪費)。為了減少程式在併發執行時的時空開銷的問題,我們在程式中引用了執行緒這個概念。也就是說,一個程序能夠包含有多個執行緒。程序之間的地址不共享,執行緒之間的資源是共享的。同一程序的各個執行緒可以共享堆疊裡面的內容。

執行緒:

執行緒是程式中一個單一的順序控制流程。程序內一個相對獨立的、可排程的執行單元,是系統獨立排程和分派CPU的基本單位指執行中的程式的排程單位。在單個程式中同時執行多個執行緒完成不同的工作,稱為多執行緒。多執行緒程式的併發性高。

執行緒是程序的一個實體,是CPU排程和分派的基本單位,它是比程序更小的能獨立執行的基本單位.執行緒自己基本上不擁有系統資源,只擁有一點在執行中必不可少的資源(如程式計數器,一組暫存器和棧),但是它可與同屬一個程序的其他的執行緒共享程序所擁有的全部資源.

程序與執行緒之間的區別

1,一個程序裡面可以包含多個執行緒。一個程式至少有一個程序,一個程序至少有一個執行緒.

2,程序之間是不共享地址空間的,程序都是擁有獨立的地址空間與能偶進行程式執行的資源。同一個程序之間的執行緒是用的同一個地址空間,共享程序的記憶體地址空間和資源,多個執行緒共享程序所擁有的資源。

3,程序是擁有資源和可獨立排程和分派的基本單位,因而程序能夠獨立執行的基本單位。而執行緒是作為排程和分派的單位。

4,其實程序就是一次程式的執行,而執行緒是程式的一個片段

5,對程序的管理和控制主要是通過控制原語言實現的

6,程序和執行緒的主要差別在於它們是不同的作業系統資源管理方式。程序有獨立的地址空間,一個程序崩潰後,在保護模式下不會對其它程序產生影響,而執行緒只是一個程序中的不同執行路徑。執行緒有自己的堆疊和區域性變數,但執行緒之間沒有單獨的地址空間,一個執行緒死掉就等於整個程序死掉,所以多程序的程式要比多執行緒的程式健壯,但在程序切換時,耗費資源較大,效率要差一些。但對於一些要求同時進行並且又要共享某些變數的併發操作,只能用執行緒,不能用程序。執行緒和程序的區別在於,子程序和父程序有不同的程式碼和資料空間,而多個執行緒則共享資料空間,每個執行緒有自己的執行堆疊和程式計數器為其執行上下文。多執行緒主要是為了節約CPU時間,發揮利用,根據具體情況而定。執行緒的執行中需要使用計算機的記憶體資源和CPU。