一般來說,線是一種非常細的絲線,通常是棉或絲綢織物,用於縫製衣服等。 同樣的術語執行緒也被用於計算機程式設計領域。 現在,我們如何將用於縫製衣服的線與用於計算機程式設計的線相關聯? 這兩個執行緒執行的角色類似。 在衣服中,執行緒將布料放在一起,在另一側,在計算機程式設計中,執行緒持有計算機程式,並允許程式一次執行順序操作或許多操作。
執行緒是作業系統中最小的執行單元。 它本身不是一個程式,而是在程式中執行。 換句話說,執行緒並不相互獨立,並與其他執行緒共用程式碼段,資料段等。 這些執行緒也被稱為輕量級進程。
為了深入理解執行緒的功能,我們需要了解執行緒的生命週期或不同的執行緒狀態。 通常,執行緒可以以五種不同的狀態存在。 下面顯示了不同的狀態 -
新執行緒
新執行緒在新狀態下開始其生命週期。 但是,在這個階段,它尚未開始,也沒有分配任何資源。 我們可以說它只是一個物件的範例。
可執行
當新出生的執行緒啟動時,執行緒變為可執行的,即等待執行。 在這種狀態下,它擁有所有資源,但仍然有任務排程程式沒有安排它執行。
執行
在此狀態下,執行緒進行並執行已由任務計劃程式選擇執行的任務。 現在,執行緒可以進入死態或不可執行/等待狀態。
非執行/待機
在這種狀態下,執行緒暫停,因為它要麼等待某個I/O請求的響應,要麼等待其他執行緒執行完成。
死鎖
可執行執行緒在完成其任務或以其他方式終止時進入終止狀態。
下圖顯示了執行緒的完整生命週期 -
在本節中,我們將看到不同型別的執行緒。 型別如下所述 -
使用者級執行緒
這些是使用者管理的執行緒。
在這種情況下,執行緒管理核心不知道執行緒的存在。 執行緒庫包含用於建立和銷毀執行緒的程式碼,用於線上程之間傳遞訊息和資料,用於排程執行緒執行以及用於儲存和恢復執行緒上下文。 應用程式以單個執行緒開始。
使用者級執行緒的例子是 -
使用者級執行緒的優點
以下是使用者級別執行緒的不同優勢 -
使用者級別執行緒的缺點
以下是使用者級別執行緒的不同缺點 -
核心級執行緒
作業系統管理的執行緒在核心上執行,核心是作業系統的核心。
在這種情況下,核心執行執行緒管理。 應用程式區域中沒有執行緒管理程式碼。 核心執行緒直接由作業系統支援。 任何應用程式都可以程式設計為多執行緒。 應用程式中的所有執行緒都在單個進程中受支援。
核心維護整個流程和流程內的各個執行緒的上下文資訊。 核心排程是基於執行緒完成的。 核心在核心空間中執行執行緒建立,排程和管理。 核心執行緒建立和管理通常比使用者執行緒要慢。 核心級執行緒的例子是Windows,Solaris。
核心級執行緒的優點
以下是核心級執行緒的不同優點 -
核心級執行緒的缺點
執行緒控制塊(TCB)可以定義為作業系統核心中的資料結構,主要包含有關執行緒的資訊。 儲存在TCB中的執行緒特定資訊將突出顯示有關每個進程的一些重要資訊。
考慮與TCB中包含的執行緒相關的以下幾點 -
在多執行緒中,進程和執行緒是兩個非常緊密相關的術語,具有相同的目標,使計算機能夠一次完成多個任務。 一個進程可以包含一個或多個執行緒,但相反,執行緒不能包含進程。 但是,它們仍然是執行的兩個基本單位。 一個執行一系列指令的程式啟動進程,並啟動兩者。
下表顯示了進程和執行緒之間的比較 -
編號 | 進程 | 執行緒 |
---|---|---|
1 | 進程是重量或資源密集型的。 | 執行緒是輕量級的,比進程佔用更少的資源。 |
2 | 進程切換需要與作業系統進行互動。 | 執行緒切換不需要與作業系統互動。 |
3 | 在多個處理環境中,每個進程執行相同的程式碼,但擁有自己的記憶體和檔案資源。 | 所有執行緒都可以共用相同的一組開啟檔案,子進程。 |
4 | 如果一個進程被阻塞,那麼在第一個進程解除阻塞之前,不能執行其他進程。 | 當一個執行緒被阻塞並等待時,同一個任務中的第二個執行緒可以執行。 |
5 | 不使用執行緒的多進程使用更多的資源。 | 多執行緒進程使用更少的資源。 |
6 | 在多個進程中,每個進程獨立於其他流程運作。 | 一個執行緒可以讀取,寫入或更改另一個執行緒的資料。 |
7 | 如果父進程中有任何更改,則不會影響子進程。 | 如果主執行緒中有任何更改,則可能會影響該進程的其他執行緒的行為。 |
8 | 要與兄弟進程進行通訊,進程必須使用進程間通訊。 | 執行緒可以直接與該進程的其他執行緒通訊。 |
正如我們前面討論過的,多執行緒是CPU通過並行執行多個執行緒來管理作業系統使用的能力。 多執行緒的主要思想是通過將進程分成多個執行緒來實現並行性。 以更簡單的方式,多執行緒是通過使用執行緒的概念來實現多工的方式。
以下範例的幫助可以理解多執行緒的概念。
範例
假設我們正在執行一個進程。 這個過程可能是為了寫一些東西而開啟MS詞。 在這樣的過程中,一個執行緒將被分配以開啟MS字,另一個執行緒將被要求寫入。 現在,假設想要編輯某些東西,那麼將需要另一個執行緒來執行編輯任務等等。
下圖解釋記憶體中是否存在多個執行緒 -
我們可以在上面的圖中看到,一個進程中可以存在多個執行緒,其中每個執行緒都包含自己的暫存器集和區域性變數。 除此之外,進程中的所有執行緒共用全域性變數。
現在讓我們看看多執行緒的一些優點。 優點如下 -
現在讓我們看看多執行緒的一些缺點。 缺點如下 -