第四章 线程
是进程的一个实体;
是被系统独立调度和分派的基本单位;
自己基本不拥有资源,只拥有一点在运行中必不可少的资源(e.g. 程序计数器、寄存器、栈);
可与同属于一个进程的其他线程共享进程所拥有的资源;
可以创建和撤销另一个线程;
同一进程中的多个线程可以并发执行;
称为light-weight process。
一个进程一般拥有若干线程,至少需要一个线程;
进程不再是一个可执行的实体。
线程是CPU使用的基本单元,它由线程ID、程序计数器、寄存器集合和栈组成。
一个传统重量级的进程只有单个控制线程,如果进程有多个控制线程,那么它能同时做多个任务。
中文版课本P111图4.1多线程进程和单线程进程的区别。
响应度高:如果对一个交互程序采用多线程,那么即使其部分阻塞或执行较冗长的操作,该程序仍能继续执行,从而增加了对用户的响应程度。
资源共享:线程默认共享它们所属进程的内存和资源。
经济:进程创建所需要的内存和资源的分配比较昂贵。由于线程能共享它们所属进程的资源,所以创建和切换线程会更经济。。
多处理器体系结构的利用:不管有多少CPU,单线程进程只能运行在一个CPU上,在多CPU上使用多线程加强了并发功能。
多对一模型(将许多用户线程映射到一个内核线程)
一对一模型(每个用户线程映射到一个内核线程)
多对多模型(多路复用了许多用户线程到同样数量或更小数量的内核线程上)
使多个程序并发执行,改善资源利用率,提高系统的吞吐量。
为了减少程序并发执行时所付出的时空开销,使OS具有更好的并发性。
可拥有资源的独立单位,可以独立调度和分派的基本单位。
进程的这两个基本属性,使进程成为一个能独立运行基本单位,从而构成了进程并发执行的基础。
调度:
传统的OS中,调度和分派的基本单位是进程,拥有资源的基本单位也是进程;
引入线程的OS中,调度和分派的基本单位是线程,拥有资源的基本单位是进程;
线程能轻装上阵,可显著地提高系统的并发度;
同一进程中,线程的切换不会引起进程切换;
不同进程中的线程之间的切换要引起进程的切换。
并发性:
引入线程的系统中,同一进程中的多个线之间可并发执行,使系统具有更好的并发性,进一步提高了资源的利用率及系统的吞吐量,例如web server、迅雷等。
拥有资源:
进程是拥有资源的独立单位;
线程仅拥有比不可少的资源,可以访问其隶属进程的资源;例如进程的代码段、数据段及系统资源,如已打开的文件、I/O设备等,可供同一进程的线程共享。
系统开销:
系统创建及撤销进程时的开销远远大于创建及撤销线程时的开销;
进程切换时的开销也远远大于线程切换时的开销;
由于同一进程中的多个线程具有相同的地址空间,致使他们之间的同步和通信的实现,也变得比较容易;
在有的OS中,线程的切换、同步和通信都无需OS内核的干预。
用户级线程仅存在于用户空间中。对于这种线程的创建、 撤消、线程之间的同步与通信等功能,都无须利用系统调用来实现,而是通过用户级线程库来实现。
对于用户级线程的切换,通常是发生在一个应用进程的诸多线程之间,这时,也同样无需内核的支持,也是通过用户级线程库来管理的。
由于切换的规则远比进程调度和切换的规则简单,因而使线程的切换速度特别快。
这种线程的管理是与内核无关的。
用户级线程执行时,要将线程映射到核心线程才能执行。
系统支持线程,无论是用户进程中的线程,还是系统进程中的线程,它们的创建、撤消和切换等,都是依靠内核实现的。
在内核空间中为每一个内核支持线程设置了一个线程控制块(TCB),内核是根据该控制块而感知某线程的存在的,并对其加以控制。
用户线程和内核线程类比顾客和银行职员
目前主要三种线程库:POSIXPthread Win32 Java
4.2
在用户和内核线程之间设置一种中间数据结构(通常为LWP)来控制用户级线程上下文切换。
4.4
多线程进程共享堆内存和全局变量,每个线程拥有自己的寄存器和栈。
4.5
不能。操作系统只能看到一个单一的进程,内核一次只能调度一个线程,并没有增加并发性,所以不能获得更好的性能。
4.7
LINE C:CHILD:value=5
LINE P:PARENT:value=0
4.8
a.内核线程数比处理器数少会导致部分处理器空闲,性能最低
b.内核线程数与处理器数相等会导致处理器不空闲,但是当发生系统调用时相应处理器会空闲,性能低。
c.内核线程数比处理器数多比用户线程数少会导致处理器不空闲,一个线程被调出则另一个被调入,处理器不会空闲,性能高。
什么是线程,为什么要引入线程?
线程是进程的一个实体,是被系统独立调度和分派的基本单位。减少程序并发执行时所付出的时空开销,使操作系统具有更好的并发性。
用户级线程与内核级线程的概念,以及他们的优缺点:
用户级线程是受内核支持,无须内核管理的线程。用户级线程能够快速创建管理,但是如果内核是单线程的,一个用户级线程阻塞整个进程就会阻塞。
内核级线程是操作系统直接实现、管理和调度的一种线程。内合计线程效率低,缺乏灵活性,但一个线程阻塞不会使整个进程的所有线程阻塞。
映射模型:
一对多、一对一、多对多