Transcript 第二章(4)-线程
Threads 线程
为什么要引入线程
– WEB服务器 同时处理多个客户请求
– 创建多个进程降低响应时间
– 进程开销较大(上下文切换)
线程(轻量级进程)
– 是CPU调度的一个基本单位
WEB server/Http request
http://…./index.htm
<html>….<img src=1.jpg><img src=2.jpg>…</html>
http://…/1.jpg
1.jpg data
IE
http://…/2.jpg
2.jpg data
WEB
Server
FlashGet / eMule /BT
1、线程的引入
为了解决以进程为运行单位而产生的并发性不
高和系统开销大的缺陷。
人们希望将进程作为调度和分派的独立单位属
性与作为拥有资源的独立单位属性分开。使得
运行者尽量不拥有资源,轻装上阵;而拥有资
源者尽量少切换。
引入线程作为轻装运行的独立单位,而进程作
为资源拥有单位。可大大提高系统的并发程度,
同时又减少系统的时空开销。
单线程与多线程
2、线程的定义
定义:线程是由进程所包含的一个实体,并能
被系统独立调度和分派的基本单位,亦即独立
运行的实体或进程中的一条执行路径或线索。
组成:线程由线程控制块(TCB)、保存线程
的程序计数器、局部变量、少数状态参数和返
回地址等信息的一组寄存器和堆栈组成。
传统的进程称为重型进程(Heavy Weight
Process),而将线程有时称为轻型进程
( Light Weight Process)。
一个进程中至少有一个线程,并继承或共享进
程资源。
3、线程属性
① 轻型实体:基本不拥有资源,只共享进程的资
源;
② 独立调度和分派的基本单位:线程是独立运行
的基本单位,且切换开销极小;
③ 并发执行:线程之间(同一进程或非同一进程)
可并发执行;
④ 共享进程资源:进程的内存空间、I/O设备、文
件、数据等。
4、线程与进程的比较(重点)
相似的地方:
– 都可以并发执行;
– 都有就绪、执行、阻塞这些基本状态,也
都可以在这些基本状态间转换状态;从创
建到撤销都有一定的生命周期;
– 都需要同步工具。
不同的地方:
– 在引入线程的OS中,线程代替进程成为独立调
度和分派的基本单位,进程则仍是拥有资源的
基本单位。
– 并发粒度不同。同一个进程里的不同线程之间,
以及不同进程的线程之间都可以并发执行,所
以线程拥有更好的并发性。
– 拥有资源数量不同。进程是拥有资源的基本单
位,线程除了些在运行过程中必不可少的资源
外基本上不拥有系统资源,它可以访问自己所
在的进程的资源。
– 管理开销不同。创建、撤销进程时系统都要为
之分配和回收资源,所以进程切换用的时空开
销相对要多于线程。进程间通信很麻烦,而同
一进程的线程间则通过共享进程的资源很方便
地通信和同步,同步开销小得多。
Benefits
Responsiveness
– 可以获得快速的用户响应,如在C/S模式下,web
server为每个用户连接运行一个线程;RPC服务器
中,RPC服务进程会开启多个线程服务于每个RPC
request
Resource Sharing
– 进程是拥有资源的基本单位(CPU,地址空间,I/O
资源),进程中的线程可以共享这些资源
Economy
– 创建线程比创建进程更快,进程内的线程切换
(context switch)比进程更快,solaris中创建线程
比进程快30倍,线程切换比进程切换快5倍
Utilization of SMP Architectures
– 可以充分利用多处理器体系结构,使得一个进程中
的线程在不同的处理器上运行,提高进程执行的并
行度
Application benefits of threads
一些应用程序可以分成若干相对独立的部
分[Word 的后台打印,拼写检查等,IE浏览
器]
每一部分用一个线程来实现
一个线程阻塞时可调度同一进程的另一个
线程运行而不是切换进程
线程间通信无需内核干预
需要解决进行线程间同步
Threads States(线程状态)
三种线程状态: running, ready,
blocked
线程无挂起状态
Termination of a process, will
terminates all threads within the
process
Java线程:创建Thread类的子类或实现Runable接口
User Level Threads(ULT)
内核不关注线程的存在
所有的线程管理由应用程序通过调用ULT库实
现
线程间的切换无需内核模式下的特权指令(无
模式转换)
线程调度由特定的应用
程序完成
例子
- POSIX Pthreads
- Mach C-threads
一种UNIX的操作系统,采用微内核
- Solaris threads
User Level Threads library
用户级线程库
Contains codes for: (包含以下代码)
– creating and destroying threads(线程的创
建和撤消)
– passing messages and data between
threads
线程间数据和消息的传递
– scheduling thread execution
对线程的调度
– saving and restoring thread contexts
对线程上下文的保存和恢复
用户级线程的优缺点
Advantages
Thread switching does
not involve the kernel:
no mode switching
无模式(管态/目态)转换
Scheduling can be
application specific:
choose the best
algorithm.
可选择最好的调度算法
ULTs can run on any
OS. Only needs a thread
library
只要有库,就可在任何操作
系统运行
Inconveniences
Most system calls are
blocking and the kernel
blocks processes. So all
threads within the
process will be blocked
多数的系统调用将阻塞该进程
的所有线程
The kernel can only
assign processes to
processors. Two threads
within the same process
cannot run
simultaneously on two
processors
一个进程的两个线程不能同在
两个处理器上同时运行
Kernel Level Threads(KLT)
内核级的线程
内核完成对所有线程的管理
无线程库,但内核供内核线程的编程接口(API)
内核需要维护进程和线程的上下文信息
线程间的调度由内核完成
调度的基本单位是线程
例子
- Windows 95/98/NT/2000
- Solaris
- Tru64 UNIX
- BeOS
处理机
内核级的线程
Advantages
the kernel can
simultaneously schedule
many threads of the same
process on many
processors
内核可在多处理机上同时对一
个进程的多个线程进行调度
blocking is done on a
thread level
阻塞仅限线程级别
kernel routines can be
multithreaded
内核程序也可以是多线程
Inconveniences
thread switching within
the same process
involves the kernel. We
have 2 mode switches
per thread switch
同进程的线程内的转换涉
及内核,每一个线程的转换
需要两个模式转换
this results in a
significant performance
slowing down
导致系统性能的下降
Multithreading Models
多线程模式
Many-to-One (多对一)
One-to-One (一对一)
Many-to-Many (多对多)
Many-to-One
Many user-level threads mapped to
single kernel thread.(纯用户级线程)
Used on systems
that do not support
kernel threads.(常用
于不支持内核线程的
系统中)
One-to-One
Each user-level thread maps to kernel
thread.
(纯核心级线程)
Examples
– Windows 95/98/NT/2000
– OS/2
Many-to-Many Model 混合式线程
Allows many user level threads to be
mapped to many kernel threads.
Takes advantage of many-to-one and oneto-one models
Allows the operating system to create a
sufficient(充足的) number of kernel threads.
例子
– Solaris 2
– Windows NT/2000 with the ThreadFiber纤程
package
Many-to-Many Model
多线程与单线程
多线程: 操作系统支持在一个进程中有多个执行
线程
单线程: 操作系统不支持线程概念
MS-DOS 支持单用户进程及单线程
传统 UNIX支持多用户进程但每进程只支持一个
线程
现今的操作系统,如Solaris, Windows, 支持多
线程
Solaris: SUN微系统公司开发的一种网络操作系统