第二章(4)-线程

Download Report

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微系统公司开发的一种网络操作系统