作業系統 - 多執行緒



什麼是執行緒?

執行緒是程序程式碼中的一條執行流,它擁有自己的程式計數器(跟蹤接下來要執行的指令)、系統暫存器(儲存其當前工作變數)和堆疊(包含執行歷史記錄)。

執行緒與其對等執行緒共享一些資訊,例如程式碼段、資料段和開啟的檔案。當一個執行緒更改程式碼段記憶體項時,所有其他執行緒都能看到該更改。

執行緒也稱為輕量級程序。執行緒提供了一種透過並行性提高應用程式效能的方法。執行緒代表了一種軟體方法,透過減少開銷來提高作業系統的效能,執行緒相當於經典程序。

每個執行緒都屬於且只屬於一個程序,並且沒有任何執行緒可以存在於程序之外。每個執行緒都代表一個單獨的控制流。執行緒已成功用於實現網路伺服器和Web伺服器。它們也為在共享記憶體多處理器上並行執行應用程式提供了合適的框架。下圖顯示了單執行緒和多執行緒程序的工作方式。

Single vs Multithreaded Process

程序和執行緒的區別

序號 程序 執行緒
1 程序是重量級的或資源密集型的。 執行緒是輕量級的,比程序消耗更少的資源。
2 程序切換需要與作業系統互動。 執行緒切換不需要與作業系統互動。
3 在多處理環境中,每個程序執行相同的程式碼,但擁有自己的記憶體和檔案資源。 所有執行緒可以共享相同的開啟檔案集和子程序。
4 如果一個程序被阻塞,則在第一個程序被解除阻塞之前,任何其他程序都不能執行。 當一個執行緒被阻塞並等待時,同一任務中的第二個執行緒可以執行。
5 不使用執行緒的多個程序會使用更多資源。 多執行緒程序使用更少的資源。
6 在多個程序中,每個程序都獨立於其他程序執行。 一個執行緒可以讀取、寫入或更改另一個執行緒的資料。

執行緒的優點

  • 執行緒最大限度地減少了上下文切換時間。
  • 使用執行緒可在程序內實現併發。
  • 高效的通訊。
  • 建立和上下文切換執行緒更經濟。
  • 執行緒允許更大規模和更高效率地利用多處理器架構。

執行緒型別

執行緒的實現方式如下:

  • 使用者級執行緒 - 使用者管理的執行緒。

  • 核心級執行緒 - 作業系統管理的執行緒,作用於核心(作業系統核心)。

使用者級執行緒

在這種情況下,執行緒管理核心不知道執行緒的存在。執行緒庫包含用於建立和銷燬執行緒、線上程之間傳遞訊息和資料、排程執行緒執行以及儲存和恢復執行緒上下文的程式碼。應用程式以單個執行緒啟動。

User level thread

優點

  • 執行緒切換不需要核心模式許可權。
  • 使用者級執行緒可以在任何作業系統上執行。
  • 排程可以在使用者級執行緒中特定於應用程式。
  • 使用者級執行緒建立和管理速度快。

缺點

  • 在典型的作業系統中,大多數系統呼叫都是阻塞的。
  • 多執行緒應用程式無法利用多處理。

核心級執行緒

在這種情況下,執行緒管理由核心完成。應用程式區域中沒有執行緒管理程式碼。核心執行緒由作業系統直接支援。任何應用程式都可以程式設計為多執行緒。應用程式中的所有執行緒都在單個程序中支援。

核心維護整個程序以及程序內各個執行緒的上下文資訊。核心按執行緒為基礎進行排程。核心在核心空間執行執行緒建立、排程和管理。核心執行緒的建立和管理通常比使用者執行緒慢。

優點

  • 核心可以同時在多個程序上排程來自同一程序的多個執行緒。
  • 如果程序中的一個執行緒被阻塞,核心可以排程同一程序的另一個執行緒。
  • 核心例程本身可以是多執行緒的。

缺點

  • 核心執行緒的建立和管理通常比使用者執行緒慢。
  • 從同一程序中的一個執行緒到另一個執行緒的控制轉移需要切換到核心模式。

多執行緒模型

一些作業系統提供組合的使用者級執行緒和核心級執行緒功能。Solaris 就是這種組合方法的一個很好的例子。在一個組合系統中,同一應用程式中的多個執行緒可以在多個處理器上並行執行,並且阻塞系統呼叫不必阻塞整個程序。多執行緒模型有三種類型

  • 多對多關係。
  • 多對一關係。
  • 一對一關係。

多對多模型

多對多模型將任意數量的使用者執行緒多路複用到相同數量或更少數量的核心執行緒上。

下圖顯示了多對多執行緒模型,其中 6 個使用者級執行緒與 6 個核心級執行緒多路複用。在這個模型中,開發人員可以根據需要建立任意數量的使用者執行緒,並且相應的核心執行緒可以在多處理器機器上並行執行。該模型在併發方面提供了最佳精度,當執行緒執行阻塞系統呼叫時,核心可以排程另一個執行緒執行。

Many to many thread model

多對一模型

多對一模型將多個使用者級執行緒對映到一個核心級執行緒。執行緒管理由使用者空間中的執行緒庫完成。當執行緒進行阻塞系統呼叫時,整個程序將被阻塞。一次只有一個執行緒可以訪問核心,因此多個執行緒無法在多處理器上並行執行。

如果使用者級執行緒庫在作業系統中以系統不支援的方式實現,則核心執行緒使用多對一關係模式。

Many to one thread model

一對一模型

使用者級執行緒與核心級執行緒之間存在一對一的關係。此模型比多對一模型提供更高的併發性。當執行緒進行阻塞系統呼叫時,它也允許另一個執行緒執行。它支援在微處理器上並行執行多個執行緒。

此模型的缺點是建立使用者執行緒需要相應的核心執行緒。OS/2、Windows NT 和 Windows 2000 使用一對一關係模型。

One to one thread model

使用者級執行緒和核心級執行緒的區別

序號 使用者級執行緒 核心級執行緒
1 使用者級執行緒建立和管理速度快。 核心級執行緒建立和管理速度慢。
2 透過使用者級的執行緒庫實現。 作業系統支援建立核心執行緒。
3 使用者級執行緒是通用的,可以在任何作業系統上執行。 核心級執行緒特定於作業系統。
4 多執行緒應用程式無法利用多處理。 核心例程本身可以是多執行緒的。
廣告