Presentation is loading. Please wait.

Presentation is loading. Please wait.

Threads 线程  为什么要引入线程 – WEB 服务器 同时处理多个客户请求 – 创建多个进程降低响应时间 – 进程开销较大 ( 上下文切换 )  线程 ( 轻量级进程 ) – 是 CPU 调度的一个基本单位.

Similar presentations


Presentation on theme: "Threads 线程  为什么要引入线程 – WEB 服务器 同时处理多个客户请求 – 创建多个进程降低响应时间 – 进程开销较大 ( 上下文切换 )  线程 ( 轻量级进程 ) – 是 CPU 调度的一个基本单位."— Presentation transcript:

1 Threads 线程  为什么要引入线程 – WEB 服务器 同时处理多个客户请求 – 创建多个进程降低响应时间 – 进程开销较大 ( 上下文切换 )  线程 ( 轻量级进程 ) – 是 CPU 调度的一个基本单位

2 WEB server/Http request IE WEB Server http://…./index.htm …. … http://…/1.jpg http://…/2.jpg 1.jpg data 2.jpg data

3 FlashGet / eMule /BT

4 1 、线程的引入  为了解决以进程为运行单位而产生的并发性不 高和系统开销大的缺陷。  人们希望将进程作为调度和分派的独立单位属 性与作为拥有资源的独立单位属性分开。使得 运行者尽量不拥有资源,轻装上阵;而拥有资 源者尽量少切换。  引入线程作为轻装运行的独立单位,而进程作 为资源拥有单位。可大大提高系统的并发程度, 同时又减少系统的时空开销。

5 单线程与多线程

6 2 、线程的定义  定义:线程是由进程所包含的一个实体,并能 被系统独立调度和分派的基本单位,亦即独立 运行的实体或进程中的一条执行路径或线索。  组成:线程由线程控制块( TCB )、保存线程 的程序计数器、局部变量、少数状态参数和返 回地址等信息的一组寄存器和堆栈组成。  传统的进程称为重型进程 (Heavy Weight Process) ,而将线程有时称为轻型进程( Light Weight Process) 。  一个进程中至少有一个线程,并继承或共享进 程资源。

7 3 、线程属性  轻型实体:基本不拥有资源,只共享进程的资 源;  独立调度和分派的基本单位:线程是独立运行 的基本单位,且切换开销极小;  并发执行:线程之间(同一进程或非同一进程) 可并发执行;  共享进程资源:进程的内存空间、 I/O 设备、文 件、数据等。

8 4 、线程与进程的比较(重点)  相似的地方: – 都可以并发执行; – 都有就绪、执行、阻塞这些基本状态,也 都可以在这些基本状态间转换状态;从创 建到撤销都有一定的生命周期; – 都需要同步工具。

9 – 在引入线程的 OS 中,线程代替进程成为独立调 度和分派的基本单位,进程则仍是拥有资源的 基本单位。 – 并发粒度不同。同一个进程里的不同线程之间, 以及不同进程的线程之间都可以并发执行,所 以线程拥有更好的并发性。 – 拥有资源数量不同。进程是拥有资源的基本单 位,线程除了些在运行过程中必不可少的资源 外基本上不拥有系统资源,它可以访问自己所 在的进程的资源。 – 管理开销不同。创建、撤销进程时系统都要为 之分配和回收资源,所以进程切换用的时空开 销相对要多于线程。进程间通信很麻烦,而同 一进程的线程间则通过共享进程的资源很方便 地通信和同步,同步开销小得多。 不同的地方:

10 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 – 可以充分利用多处理器体系结构,使得一个进程中 的线程在不同的处理器上运行,提高进程执行的并 行度

11 一些应用程序可以分成若干相对独立的部 分 [Word 的后台打印, 拼写检查等,IE 浏览 器 ] 每一部分用一个线程来实现 一个线程阻塞时可调度同一进程的另一个 线程运行而不是切换进程 线程间通信无需内核干预 需要解决进行线程间同步 Application benefits of threads

12 三种线程状态 : running, ready, blocked 线程无挂起状态 Termination of a process, will terminates all threads within the process Threads States( 线程状态 )

13

14 User Level Threads(ULT)  内核不关注线程的存在  所有的线程管理由应用程序通过调用 ULT 库实 现  线程间的切换无需内核模式下的特权指令(无 模式转换)  线程调度由特定的应用 程序完成  例子 - POSIX Pthreads - Mach C-threads 一种 UNIX 的操作系统, 采用微内核 - Solaris threads Java 线程:创建 Thread 类的子类或实现 Runable 接口

15 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 对线程上下文的保存和恢复

16 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 一个进程的两个线程不能同在 两个处理器上同时运行 用户级线程的优缺点

17 Kernel Level Threads(KLT) 内核级的线程  内核完成对所有线程的管理  无线程库,但内核供内核线程的编程接口( API )  内核需要维护进程和线程的上下文信息  线程间的调度由内核完成  调度的基本单位是线程  例子 - Windows 95/98/NT/2000 - Solaris - Tru64 UNIX - BeOS 处理机

18 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 导致系统性能的下降 内核级的线程

19 Multithreading Models 多线程模式  Many-to-One ( 多对一 )  One-to-One ( 一对一 )  Many-to-Many ( 多对多 )

20 Many-to-One  Many user-level threads mapped to single kernel thread. (纯用户级线程)  Used on systems that do not support kernel threads.( 常用 于不支持内核线程的 系统中 )

21 One-to-One  Each user-level thread maps to kernel thread. (纯核心级线程)  Examples – Windows 95/98/NT/2000 – OS/2

22 Many-to-Many Model 混合式线程  Allows many user level threads to be mapped to many kernel threads.  Takes advantage of many-to-one and one- to-one models  Allows the operating system to create a sufficient( 充足的 ) number of kernel threads.  例子 – Solaris 2 – Windows NT/2000 with the ThreadFiber 纤程 package

23 Many-to-Many Model

24 多线程与单线程 多线程 : 操作系统支持在一个进程中有多个执行 线程 单线程 : 操作系统不支持线程概念 MS-DOS 支持单用户进程及单线程 传统 UNIX 支持多用户进程但每进程只支持一个 线程 现今的操作系统,如 Solaris, Windows, 支持多 线程 Solaris: SUN 微系统公司开发的一种网络操作系统


Download ppt "Threads 线程  为什么要引入线程 – WEB 服务器 同时处理多个客户请求 – 创建多个进程降低响应时间 – 进程开销较大 ( 上下文切换 )  线程 ( 轻量级进程 ) – 是 CPU 调度的一个基本单位."

Similar presentations


Ads by Google