《c++多核高階程式設計》第6章多執行緒,本章將介紹:什麼是執行緒; 用於執行緒管理的pthread api;執行緒排程及優先順序;執行緒競爭範圍;擴充套件thread_object以封裝執行緒屬性功能。本節為大家介紹使用者級執行緒和核心級執行緒。
6.1.1 使用者級執行緒和核心級執行緒
執行緒有3種實現模型:
使用者級或應用程式級執行緒
核心級執行緒
使用者級和核心級混合執行緒
圖6-1顯示了3種執行緒實現模型。圖6-1(a)顯示了使用者級執行緒,圖6-1(b)顯示了核心級執行緒,圖6-1(c)則顯示了使用者執行緒和核心執行緒的混合。
這些實現之間的較大的區別之一就是它們的模式以及要指派給處理器的執行緒的能力。這些執行緒執行在使用者模式下或核心模式下。
在使用者模式下,程序或執行緒是執行程式或鏈結庫中的指令,它們不對作業系統核心進行任何呼叫。
在核心模式下,程序或執行緒是在進行系統呼叫,例如訪問資源或丟擲異常。同時,在核心模式下,程序或執行緒可以訪問在核心空間中定義的物件。
使用者級執行緒駐留在使用者空間或模式。執行時庫管理這些執行緒,它也位於使用者空間。它們對於作業系統是不可見的,因此無法被排程到處理器核心。每個執行緒並不具有自身的執行緒上下文。因此,就執行緒的同時執行而言,任意給定時刻每個程序只能夠有乙個執行緒在執行,而且只有乙個處理器核心會被分配給該程序。對於乙個程序,可能有成千上萬個使用者級執行緒,但是它們對系統資源沒有影響。執行時庫排程並分派這些執行緒。如同在圖6-1(a)中看到的那樣,庫排程器從程序的多個執行緒中選擇乙個執行緒,然後該執行緒和該程序允許的乙個核心執行緒關聯起來。核心執行緒將被作業系統排程器指派到處理器核心。使用者級執行緒是一種"多對一"的執行緒對映。
核心級執行緒駐留在核心空間,它們是核心物件。有了核心執行緒,每個使用者執行緒被對映或繫結到乙個核心執行緒。使用者執行緒在其生命期內都會繫結到該核心執行緒。一旦使用者執行緒終止,兩個執行緒都將離開系統。這被稱作"一對一"執行緒對映,如圖6-1(b)所示。作業系統排程器管理、排程並分派這些執行緒。執行時庫為每個使用者級執行緒請求乙個核心級執行緒。作業系統的記憶體管理和排程子系統必須要考慮到數量巨大的使用者級執行緒。您必須了解每個程序允許的執行緒的最大數目是多少。作業系統為每個執行緒建立上下文。執行緒的上下文將在本章稍後部分介紹。程序的每個執行緒在資源可用時都可以被指派到處理器核心。
混合執行緒實現是使用者執行緒和核心執行緒的交叉,使得庫和作業系統都可以管理執行緒。使用者執行緒由執行時庫排程器管理,核心執行緒由作業系統排程器管理。在這種實現中,程序有著自己的核心執行緒池。可執行的使用者執行緒由執行時庫分派並標記為準備好執行的可用執行緒。作業系統選擇使用者執行緒並將它對映到執行緒池中的可用核心執行緒。多個使用者執行緒可以分配給相同的核心執行緒。在圖6-1(c)中,程序a在它的執行緒池中有兩個核心執行緒,而程序b有3個核心執行緒。程序a的使用者執行緒2和3被對映到核心執行緒(2)。程序b有5個執行緒,使用者執行緒1和2對映到同乙個核心執行緒(3),使用者執行緒4和5對映到核心同乙個核心執行緒(5)。當建立新的使用者執行緒時,只需要簡單地將它對映到執行緒池中現有的乙個核心執行緒即可。這種實現使用了"多對多"執行緒對映。該方法中盡量使用多對一對映。很多使用者執行緒將會對映到乙個核心執行緒,就像您在前面的示例中所看到的。因此,對核心執行緒的請求將會少於使用者執行緒的數目。
核心執行緒池不會被銷毀和重建,這些執行緒總是位於系統中。它們會在必要時分配給不同的使用者級執行緒,而不是當建立新的使用者級執行緒時就建立乙個新的核心執行緒,而純核心級執行緒被建立時,就會建立乙個新的核心執行緒。只對池中的每個執行緒建立上下文。有了核心執行緒和混合執行緒,作業系統分配一組處理器核心,程序的執行緒可以在這些處理器核心之上執行。執行緒只能在為它們所屬執行緒指派的處理器核心上執行。
在確定執行緒的排程模型和競爭範圍時,使用者級執行緒和核心級執行緒變得很重要。競爭範圍決定了指定的執行緒與那些執行緒競爭處理器的使用,而且對於作業系統對大量執行緒的記憶體管理也非常重要。
使用者級執行緒和核心級執行緒
根據在使用者空間還是在核心實現多執行緒機制,執行緒又被分為使用者級執行緒 user level thread 和核心級執行緒 kernel level thread 有關執行緒的所有管理工作都有在使用者級實現的執行緒庫來支援。使用者級執行緒庫是用於使用者級執行緒管理的例程包,支援執行緒的建立 終止,...
使用者級執行緒和核心級執行緒
執行緒有3種實現模型 使用者級或應用程式級執行緒 核心級執行緒 使用者級和核心級混合執行緒 圖6 1顯示了3種執行緒實現模型。圖6 1 a 顯示了使用者級執行緒,圖6 1 b 顯示了核心級執行緒,圖6 1 c 則顯示了使用者執行緒和核心執行緒的混合。這些實現之間的較大的區別之一就是它們的模式以及要指...
使用者級執行緒和核心級執行緒
6.1.1 使用者級執行緒和核心級執行緒 執行緒有3種實現模型 使用者級或應用程式級執行緒 核心級執行緒 使用者級和核心級混合執行緒 圖6 1顯示了3種執行緒實現模型。圖6 1 a 顯示了使用者級執行緒,圖6 1 b 顯示了核心級執行緒,圖6 1 c 則顯示了使用者執行緒和核心執行緒的混合。這些實現...