java資料——執行緒(轉)

weixin_34292959發表於2015-12-17

執行緒

      執行緒,有時被稱為輕量級程式(Lightweight Process,LWP),是程式執行流的最小單元。一個標準的執行緒由執行緒ID,當前指令指標(PC),暫存器集合和堆疊組成。另外,執行緒是程式中的一個實體,是被系統獨立排程和分派的基本單位,執行緒自己不擁有系統資源,只擁有一點兒在執行中必不可少的資源,但它可與同屬一個程式的其它執行緒共享程式所擁有的全部資源。一個執行緒可以建立和撤消另一個執行緒,同一程式中的多個執行緒之間可以併發執行。由於執行緒之間的相互制約,致使執行緒在執行中呈現出間斷性。執行緒也有就緒阻塞執行三種基本狀態。就緒狀態是指執行緒具備執行的所有條件,邏輯上可以執行,在等待處理機;執行狀態是指執行緒佔有處理機正在執行;阻塞狀態是指執行緒在等待一個事件(如某個訊號量),邏輯上不可執行。每一個程式都至少有一個執行緒,若程式只有一個執行緒,那就是程式本身。
執行緒是程式中一個單一的順序控制流程。程式內一個相對獨立的、可排程的執行單元,是系統獨立排程和分派CPU的基本單位指執行中的程式的排程單位。在單個程式中同時執行多個執行緒完成不同的工作,稱為多執行緒
中文名
執行緒
外文名
thread
別    稱
執行緒;輕量程式
應用學科
計算機
多執行緒中
CPU的基本單位
定    義
程式執行流的最小單元

適用範圍

1.伺服器中的檔案管理或通訊控制

執行緒執行緒

2.前後臺處理

3.非同步處理

特點

執行緒的使用執行緒的使用

多執行緒OS中,通常是在一個程式中包括多個執行緒,每個執行緒都是作為利用CPU的基本單位,是花費最小開銷的實體。執行緒具有以下屬性。

1)輕型實體

執行緒中的實體基本上不擁有系統資源,只是有一點必不可少的、能保證獨立執行的資源。

執行緒的實體包括程式、資料和TCB。執行緒是動態概念,它的動態特性由執行緒控制塊TCB(Thread Control Block)描述。TCB包括以下資訊:

(1)執行緒狀態。

(2)當執行緒不執行時,被儲存的現場資源。

(3)一組執行堆疊。

(4)存放每個執行緒的區域性變數主存區。

(5)訪問同一個程式中的主存和其它資源。

用於指示被執行指令序列的程式計數器、保留區域性變數、少數狀態引數和返回地址等的一組暫存器堆疊

2)獨立排程和分派的基本單位。

在多執行緒OS中,執行緒是能獨立執行的基本單位,因而也是獨立排程和分派的基本單位。由於執行緒很“輕”,故執行緒的切換非常迅速且開銷小(在同一程式中的)。

3)可併發執行。

      在一個程式中的多個執行緒之間,可以併發執行,甚至允許在一個程式中所有執行緒都能併發執行;同樣,不同程式中的執行緒也能併發執行,充分利用和發揮了處理機與外圍裝置並行工作的能力。

4)共享程式資源。

執行緒執行緒

      在同一程式中的各個執行緒,都可以共享該程式所擁有的資源,這首先表現在:所有執行緒都具有相同的地址空間(程式的地址空間),這意味著,執行緒可以訪問該地址空間的每一個虛地址;此外,還可以訪問程式所擁有的已開啟檔案、定時器、訊號量機構等。由於同一個程式內的執行緒共享記憶體檔案,所以執行緒之間互相通訊不必呼叫核心

與程式比較

執行緒執行緒

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

      另外,程式也是搶佔處理機的排程單位,它擁有一個完整的虛擬地址空間。當程式發生排程時,不同的程式擁有不同的虛擬地址空間,而同一程式內的不同執行緒共享同一地址空間。

      與程式相對應,執行緒與資源分配無關,它屬於某一個程式,並與程式內的其他執行緒一起共享程式的資源。

     執行緒只由相關堆疊系統棧或使用者棧暫存器和執行緒控制表TCB組成。暫存器可被用來儲存執行緒內的區域性變數,但不能儲存其他執行緒的相關變數。

      通常在一個程式中可以包含若干個執行緒,它們可以利用程式所擁有的資源。在引入執行緒的作業系統中,通常都是把程式作為分配資源的基本單位,而把執行緒作為獨立執行和獨立排程的基本單位。由於執行緒比程式更小,基本上不擁有系統資源,故對它的排程所付出的開銷就會小得多,能更高效的提高系統內多個程式間併發執行的程度,從而顯著提高系統資源的利用率和吞吐量。因而近年來推出的通用作業系統都引入了執行緒,以便進一步提高系統的併發性,並把它視為現代作業系統的一個重要指標。

執行緒與程式的區別可以歸納為以下4點:

1)地址空間和其它資源(如開啟檔案):程式間相互獨立,同一程式的各執行緒間共享。某程式內的執行緒在其它程式不可見。

2)通訊:程式間通訊IPC,執行緒間可以直接讀寫程式資料段(如全域性變數)來進行通訊——需要程式同步和互斥手段的輔助,以保證資料的一致性。

3)排程和切換:執行緒上下文切換比程式上下文切換要快得多。

4)在多執行緒OS中,程式不是一個可執行的實體。

相關文章