天天看點

關于程序與線程

“程序是資源配置設定的最小機關,線程是CPU排程的最小機關”

一、程序(Process)

1、什麼是程序

程序(Process)是計算機中的程式關于某資料集合上的一次運作活動,是系統進行資源配置設定和排程的基本機關,是作業系統結構的基礎。

在早期面向程序設計的計算機結構中,程序是程式的基本執行實體;在當代面向線程設計的計算機結構中,程序是線程的容器。

程式是指令、資料及其組織形式的描述,程序是程式的實體。

二、線程

1、什麼是線程

線程(thread),有時被稱為輕量級程序(Lightweight Process,LWP),是程式執行流的最小單元。一個标準的線程由線程 ID、目前指令指針(PC)、寄存器集合和堆棧組成。

另外,線程是程序中的一個實體,是被系統獨立排程和分派的基本機關,線程自己不擁有系統資源,隻擁有一點兒在運作中必不可少的資源,但它可與同屬一個程序的其它線程共享程序所擁有的全部資源。

一個線程可以建立和撤消另一個線程,同一程序中的多個線程之間可以并發執行。

由于線程之間的互相制約,緻使線程在運作中呈現出間斷性。

2、線程的基本狀态

線程有就緒、阻塞和運作三種基本狀态:

  • 就緒狀态是指線程具備運作的所有條件,邏輯上可以運作,在等待處理機
  • 運作狀态是指線程占有處理機正在運作
  • 阻塞狀态是指線程在等待一個事件(如某個信号量),邏輯上不可執行

每一個程式都至少有一個線程,若程式隻有一個線程,那就是程式本身。

線程是程式中一個單一的順序控制流程。

程序内一個相對獨立的、可排程的執行單元,是系統獨立排程和分派CPU的基本機關指運作中的程式的排程機關。

3、什麼是多線程

在單個程式中同時運作多個線程完成不同的工作,稱為多線程。

三、程序和線程差別

程序是資源配置設定的基本機關。所有與該程序有關的資源,都被記錄在程序控制塊 PCB 中。以表示該程序擁有這些資源或正在使用它們。

另外,程序也是搶占處理機的排程機關,它擁有一個完整的虛拟位址空間。

當程序發生排程時,不同的程序擁有不同的虛拟位址空間,而同一程序内的不同線程共享同一位址空間。

與程序相對應,線程與資源配置設定無關,它屬于某一個程序,并與程序内的其他線程一起共享程序的資源。

線程隻由相關堆棧(系統棧或使用者棧)寄存器和線程控制表TCB組成。寄存器可被用來存儲線程内的局部變量,但不能存儲其他線程的相關變量。

通常在一個程序中可以包含若幹個線程,它們可以利用程序所擁有的資源。在引入線程的作業系統中,通常都是把程序作為配置設定資源的基本機關,而把線程作為獨立運作和獨立排程的基本機關。

由于線程比程序更小,基本上不擁有系統資源,故對它的排程所付出的開銷就會小得多,能更高效的提高系統内多個程式間并發執行的程度,進而顯著提高系統資源的使用率和吞吐量。因而近年來推出的通用作業系統都引入了線程,以便進一步提高系統的并發性,并把它視為現代作業系統的一個重要名額。

線程與程序的差別可以歸納為以下4點:

  1. 位址空間和其它資源(如打開檔案):程序間互相獨立,同一程序的各線程間共享。某程序内的線程在其它程序不可見。
  2. 通信:程序間通信IPC,線程間可以直接讀寫程序資料段(如全局變量)來進行通信——需要程序同步和互斥手段的輔助,以保證資料的一緻性。
  3. 排程和切換:線程上下文切換比程序上下文切換要快得多。
  4. 在多線程OS中,程序不是一個可執行的實體。

四、多程序和多線程的比較

關于程式與線程