线程实现模型
Posted randyniu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了线程实现模型相关的知识,希望对你有一定的参考价值。
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一值。
以上是关于线程实现模型的主要内容,如果未能解决你的问题,请参考以下文章
Linux 线程实现机制分析 Linux 线程实现机制分析 Linux 线程模型的比较:LinuxThreads 和 NPTL