線程實現模型
N:1用戶線程模型
“線程實現”建立在“進程控制”機制之上,由用戶空間的程序庫來管理。OS內核完全不知道線程信息。這些線程稱為用戶空間線程。這些線程都工作在“進程競爭範圍”
N:1用戶線程模型
在N:1線程模型中,內核不幹涉線程的任何生命活動,也不幹涉同一進程中的線程環境切換。
在N:1線程模型中,一個進程中的多個線程只能調度到一個CPU,這種約束限制了可用的並行總量。
第二個缺點是如果某個線程執行了一個“阻塞式”操作(如read),那麽,進程中的所有線程都會阻塞,直至那個操作結束。為此,一些線程的實現是為這些阻塞式函數提供包裝器,用非阻塞版本替換這些系統調用,以消除這種限制。
1:1核心線程模型
在1:1核心線程模型中,應用程序創建的每一個線程都由一個核心線程直接管理。
OS內核將每一個核心線程都調到系統CPU上,因此,所有線程都工作在“系統競爭範圍”。
這種線程的創建與調度由內核完成,因為這種線程的系統開銷比較大(但一般來說,比進程開銷小)。
內核線程,每個用戶線程被映射或綁定到一個內核線程。用戶線程在其生命期內都會綁定到該內核線程。一旦用戶線程終止,兩個線程都將離開系統。稱作”一對一”線程映射
N:M混合線程模型
N:M混合線程模型提供了兩級控制,將用戶線程映射為系統的可調度體以實現並行,這個可調度體稱為輕量級進程(LWP:lightweight process),LWP再一一映射到核心線程
用戶級線程主要解決的是上下文切換的問題,它的調度算法和調度過程全部由用戶自行選擇決定,在運行時不需要特定的內核支持。在這裏,操作系統往往會提供一個用戶空間的線程庫,該線程庫提供了線程的創建、調度和撤銷等功能,而內核仍然僅對進程進行管理。如果一個進程中的某一個線程調用了一個阻塞的系統調用函數,那麽該進程包括該進程中的其他所有線程也同時被阻塞。這種用戶級線程的主要缺點是在一個進程中的多個線程的調度中無法發揮多處理器的優勢。
輕量級進程是內核支持的用戶線程,是內核線程的一種抽象對象。每個線程擁有一個或多個輕量級線程,而每個輕量級線程分別被綁定在一個內核線程上。
內核線程建立和銷毀都是由操作系統負責、通過系統調用完成的。線程管理的所有工作由內核完成。
posix線程調度是一個混合模型,在標準的特定實現中支持用戶級和內核級的線程。模型中包括兩級調度–線程及和內核實體級。線程級與用戶級線程類似,內核實體由內核調度。由線程庫來決定它需要多少內核實體,以及他們是如何映射的。LinuxThreads僅實現了PTHREAD_SCOPE_SYSTEM一值。
線程實現模型