您的位置:首页 > 职场人生

《读书笔记》程序员的自我修养之线程模型

2016-03-14 21:37 120 查看

《读书笔记》程序员的自我修养之线程模型

线程可分为用户级线程(User Thread)和内核级线程(Kernel Thread),后者又称为内核支持的线程或轻量级进程。在多线程操作系统中,各个系统的实现方式并不相同,在有的系统中实现了用户级线程,有的系统中实现了内核级线程。

用户线程:不需要内核支持而在用户程序中实现的线程,其不依赖于操作系统核心,应用进程利用线程库提供创建、同步、调度和管理线程的函数来控制用户线程。不需要用户态/核心态切换,速度快,操作系统内核不知道多线程的存在,因此一个线程阻塞将使得整个进程(包括它的所有线程)阻塞。由于这里的处理器时间片分配是以进程为基本单位,所以每个线程执行的时间相对减少。

内核线程:由操作系统内核创建和撤销。内核维护进程及线程的上下文信息以及线程切换。一个内核线程由于I/O操作而阻塞,不会影响其它线程的运行。Windows NT和2000/XP支持内核线程。

用户线程运行在一个中间系统上面。目前中间系统实现的方式有两种,即运行时系统(Runtime System)和内核控制线程。“运行时系统”实质上是用于管理和控制线程的函数集合,包括创建、撤销、线程的同步和通信的函数以及调度的函数。这些函数都驻留在用户空间作为用户线程和内核之间的接口。用户线程不能使用系统调用,而是当线程需要系统资源时,将请求传送给运行时,由后者通过相应的系统调用来获取系统资源。内核控制线程:系统在分给进程几个轻型进程(LWP),LWP可以通过系统调用来获得内核提供的服务,而进程中的用户线程可通过复用来关联到LWP,从而得到内核的服务。

以下是用户级线程和内核级线程的区别:

(1) 内核支持线程是OS内核可感知的,而用户级线程是OS内核不可感知的。

(2) 用户级线程的创建、撤消和调度不需要OS内核的支持,是在语言(如Java)这一级处理的;而内核支持线程的创建、撤消和调度都需OS内核提供支持,而且与进程的创建、撤消和调度大体是相同的。

(3) 用户级线程执行系统调用指令时将导致其所属进程被中断,而内核支持线程执行系统调用指令时,只导致该线程被中断。

(4) 在只有用户级线程的系统内,CPU调度还是以进程为单位,处于运行状态的进程中的多个线程,由用户程序控制线程的轮换运行;在有内核支持线程的系统内,CPU调度则以线程为单位,由OS的线程调度程序负责线程的调度。

(5) 用户级线程的程序实体是运行在用户态下的程序,而内核支持线程的程序。实体则是可以运行在任何状态下的程序。

内核线程的优点:当有多个处理机时,一个进程的多个线程可以同时执行。

内核线程的缺点:由内核进行调度。

用户级线程的优点:

(1) 线程的调度不需要内核直接参与,控制简单。

(2) 可以在不支持线程的操作系统中实现。

(3) 创建和销毁线程、线程切换代价等线程管理的代价比内核线程少得多。

(4) 允许每个进程定制自己的调度算法,线程管理比较灵活。这就是必须自己写管理程序,与内核线程的区别

(5) 线程能够利用的表空间和堆栈空间比内核级线程多。

(6) 同一进程中只能同时有一个线程在运行,如果有一个线程使用了系统调用而阻塞,那么整个进程都会被挂起。另外,页面失效也会产生同样的问题。

用户级线程的缺点:资源调度按照进程进行,多个处理机下,同一个进程中的线程只能在同一个处理机下分时复用

注:以上转载于:http://col1.blog.163.com/blog/static/1909775192012719114033352/

用户实际使用的线程不是内核线程,而是存在于用户态的用户线程。用户态线程并不一定在操作系统内核里对应同等数量的内核线程。

一对一模型

一个用户使用的线程唯一对应一个内核使用的线程(反之不然,一个内核里的线程在用户态不一定有对应的线程存在)。

优点:线程之间的并发是真正的并发,一个线程因为某种原因阻塞时,其他线程不会受到影响。Linux使用clone可以产生一对一线程。Windows使用APICreateThread来创建一个一对一的线程。

缺点:

1)由于许多操作系统限制了内核线程的数量,因此一对一线程会让用户的线程数量受到限制;

2)许多操作系统内核线程调度时,上下文切换的开销较大,导致用户线程的执行效率下降

多对一模型

多对一模型将多个用户级线程映射到一个内核线程上,线程之间的切换由用户态的代码来完成。

多对一模型的一大缺点是:如果其中一个用户线程阻塞,那么所有用户线程豆浆无法执行,因为此时内核内的线程也将随之阻塞了。

多对多模型

将多个用户线程用射到少数但不止一个的内核线程上。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: