天天看點

程序和線程的關系及差別

1. 定義

程序(process)是具有一定獨立功能的程式關于某個資料集合上的一次運作活動,是系統進行資源配置設定和排程的一個獨立機關。

線程(thread)是程序的一個實體,是CPU排程和分派的基本機關,它是比程序更小的能獨立運作的基本機關。線程基本上不擁有系統資源,隻擁有一點在運作中必不可少的資源(如程式計數器,一組寄存器和棧),但是它可與同屬一個程序的其它線程共享程序所擁有的全部資源。一個線程可以建立和撤銷另一個線程。

2. 關系

【1】一個線程隻能屬于一個程序,而一個程序可以有多個線程,但至少有一個線程。

【2】系統把資源配置設定給程序,同一程序的所有線程共享該程序的所有資源。

【3】線程在執行過程中,需要協作同步。不同程序的線程間要利用消息通信的辦法實作同步。

【4】處理機分給線程,即真正在處理機上運作的是線程。

【5】線程是指程序内的一個執行單元,也是程序内的可排程實體。

3. 差別

【1】排程:線程作為排程和配置設定的基本機關,程序作為擁有資源的基本機關。

【2】并發性:不僅程序之間可以并發執行,同一個程序的多個線程之間也可以并發執行。

【3】擁有資源:程序是擁有資源的一個獨立機關,線程不擁有系統資源,但可以通路屬于程序的資源。

【4】系統開銷:在建立和撤銷程序時,由于系統都要為之配置設定和回收資源,導緻系統的開銷明顯大于建立和撤銷線程時的開銷。

程序和線程的主要差别在于它們是不同的作業系統資源管理方式。程序具有獨立的位址空間,一個程序崩潰後,在保護模式下不會對其它程序産生影響,而線程隻是一個程序中的不同執行路徑。線程有自己的堆棧和局部變量,但線程沒有單獨的位址空間,一個線程死掉就等于整個程序死掉,是以多程序的程式要比多線程的程式健壯,但在程序切換時,資源耗費較大,效率要差一些。對于一些要求同時進行,又要共享某些變量的并發操作,隻能用線程而不能用程序。

線程的劃分尺度小于程序,使得多線程程式的并發性高。另外,程序在執行過程中擁有獨立的記憶體單元,而多個線程共享記憶體,進而極大地提高了程式的運作效率。每個獨立的線程有一個程式運作的入口,順序執行序列和程式的出口,但是線程不能獨立運作,必須依存在應用程式中,由應用程式提供多個線程執行控制。

從邏輯角度來看,多線程的意義在于一個應用程式中,有多個執行部分可以同時執行。但作業系統并沒有将多個線程看做多個獨立的應用來實作程序的排程和管理及資源配置設定。這就是程序和線程的重要差別。

繼續閱讀