“程序是資源配置設定的最小機關,線程是CPU排程的最小機關”
一、程序(Process)
1、什麼是程序
程序(Process)是計算機中的程式關于某資料集合上的一次運作活動,是系統進行資源配置設定和排程的基本機關,是作業系統結構的基礎。
在早期面向程序設計的計算機結構中,程序是程式的基本執行實體;在當代面向線程設計的計算機結構中,程序是線程的容器。
程式是指令、資料及其組織形式的描述,程序是程式的實體。
二、線程
1、什麼是線程
線程(thread),有時被稱為輕量級程序(Lightweight Process,LWP),是程式執行流的最小單元。一個标準的線程由線程 ID、目前指令指針(PC)、寄存器集合和堆棧組成。
另外,線程是程序中的一個實體,是被系統獨立排程和分派的基本機關,線程自己不擁有系統資源,隻擁有一點兒在運作中必不可少的資源,但它可與同屬一個程序的其它線程共享程序所擁有的全部資源。
一個線程可以建立和撤消另一個線程,同一程序中的多個線程之間可以并發執行。
由于線程之間的互相制約,緻使線程在運作中呈現出間斷性。
2、線程的基本狀态
線程有就緒、阻塞和運作三種基本狀态:
- 就緒狀态是指線程具備運作的所有條件,邏輯上可以運作,在等待處理機
- 運作狀态是指線程占有處理機正在運作
- 阻塞狀态是指線程在等待一個事件(如某個信号量),邏輯上不可執行
每一個程式都至少有一個線程,若程式隻有一個線程,那就是程式本身。
線程是程式中一個單一的順序控制流程。
程序内一個相對獨立的、可排程的執行單元,是系統獨立排程和分派CPU的基本機關指運作中的程式的排程機關。
3、什麼是多線程
在單個程式中同時運作多個線程完成不同的工作,稱為多線程。
三、程序和線程差別
程序是資源配置設定的基本機關。所有與該程序有關的資源,都被記錄在程序控制塊 PCB 中。以表示該程序擁有這些資源或正在使用它們。
另外,程序也是搶占處理機的排程機關,它擁有一個完整的虛拟位址空間。
當程序發生排程時,不同的程序擁有不同的虛拟位址空間,而同一程序内的不同線程共享同一位址空間。
與程序相對應,線程與資源配置設定無關,它屬于某一個程序,并與程序内的其他線程一起共享程序的資源。
線程隻由相關堆棧(系統棧或使用者棧)寄存器和線程控制表TCB組成。寄存器可被用來存儲線程内的局部變量,但不能存儲其他線程的相關變量。
通常在一個程序中可以包含若幹個線程,它們可以利用程序所擁有的資源。在引入線程的作業系統中,通常都是把程序作為配置設定資源的基本機關,而把線程作為獨立運作和獨立排程的基本機關。
由于線程比程序更小,基本上不擁有系統資源,故對它的排程所付出的開銷就會小得多,能更高效的提高系統内多個程式間并發執行的程度,進而顯著提高系統資源的使用率和吞吐量。因而近年來推出的通用作業系統都引入了線程,以便進一步提高系統的并發性,并把它視為現代作業系統的一個重要名額。
線程與程序的差別可以歸納為以下4點:
- 位址空間和其它資源(如打開檔案):程序間互相獨立,同一程序的各線程間共享。某程序内的線程在其它程序不可見。
- 通信:程序間通信IPC,線程間可以直接讀寫程序資料段(如全局變量)來進行通信——需要程序同步和互斥手段的輔助,以保證資料的一緻性。
- 排程和切換:線程上下文切換比程序上下文切換要快得多。
- 在多線程OS中,程序不是一個可執行的實體。