多核程序设计:第三章 线程的基本概念_第1页
多核程序设计:第三章 线程的基本概念_第2页
多核程序设计:第三章 线程的基本概念_第3页
多核程序设计:第三章 线程的基本概念_第4页
多核程序设计:第三章 线程的基本概念_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1第三章 线程的基本概念小节章节重点内容3.1多线程的概念进程?线程?多线程机制的优势?3.2用户级线程和内核级线程谁来管理多线程?3.3多线程的映射模型用户级线程 内核级线程3.4线程的生命周期创建、终止、状态3.5多线程环境下的进程控制语义进程创建、终止、执行、信号处理3.6线程的同步同步机制、锁23.1 多线程的概念Multi ? 许多任务在逻辑上涉及多个控制流,控制流具有内在的并发性,当其中一些控制流被阻塞时,另外一些控制流仍可继续. 例如:Word文字编辑工具、Web服务器等。33.1 多线程的概念Multi process V.S. Multi thread?进程 - 是指程序在一

2、个数据集合上运行的过程,是系统进行资源分配和调度运行的一个独立单位,有时也称为活动、路径或任务。 如果说在操作系统中引入进程的目的,是为了在多道程序系统中正确的描述程序并发的执行过程;那么,在操作系统中再引入线程则是为了减少程序并发执行时所付出的时空开销,使操作系统具有更好的并发性。进程是资源的分配单位 。线程 是进程中的一个执行流,是处理机调度的基本单元。每个程序至少包含一个线程,那就是主线程。线程自己只拥有很少的系统资源(如程序计数器、一组寄存器和栈),但它可与同属一个进程的其他线程共享所属进程所拥有的全部资源,同一进程中的多个线程之间可以并发执行,从而更好地改善了系统资源的利用率。 43

3、.1 多线程的概念线程(thread)进程上下文中执行的代码序列轻量级进程(light weight process)在支持多线程的系统中进程成为资源分配和保护的实体线程是被调度执行的基本单元。进程的资源包括进程的地址空间,打开的文件和I/O等属于同一个进程的线程共享该进程的代码段和数据段,打开的文件,信号等还包含各自的线程ID,线程执行状态,CPU寄存器状态和栈进程与线程5 线程是“进程中的一条执行路径或线索”或“进程中的一个可调度实体”。多线程的应用特点某些应用需要处理几个相似或者并行的几个任务,创建进程需要给每个进程分配资源,用多进程来实现上述工作很不经济,响应时间长。如在C/S模式下,

4、web server为每个用户连接运行一个线程;RPC服务器中,RPC服务进程会开启多个线程服务于每个RPC request某些应用可以分成若干相对独立的部分,每一部分用一个线程来实现在多处理器系统上,如果一个应用具有如下特征,就可以利用多线程技术达到目标: 前台后台操作; 异步处理; 需要加速执行; 模块化程序结构6多线程的优点传统优点:创建一个线程比创建一个进程的代价要小如 solaris中创建线程比进程快30倍,线程的切换比进程间的切换代价小由同一进程中的一个线程切换到另一个线程只需改变寄存器和栈,包括程序和数据在内的地址空间不变;如 solaris线程切换比进程切换快5倍充分利用多处理

5、器提高了程序执行并行度,降低了并行粒度数据共享由于同一进程中的多个线程地址空间共享,一个线程写到数据空间的信息可以直接被该进程中的另一线程读取,方便快捷 快速响应特性 多核处理器的基本结构是共享存储的,多线程程序设计技术被认为是能够充分挖掘共享存储系统性能潜力的最有效的技术。7总结:为什么要多线程程序设计某些应用具有内在的多个控制流结构,这些控制流具有合作性质,需要共享内存,采用多线程易于对问题建模,从而得到最自然的解决算法 ;在需要多控制流的应用中,多线程比多进程在速度上具有绝对优势,统计测试表明,线程的建立速度比进程的建立速度快100倍,进程内线程间的切换速度与进程间切换速度也有数量级之差

6、; 采用多线程可以提高处理机与设备之间的并行性. 在单控制流情形下,启动设备的进程进入核心后将被阻塞,此时该进程的其它代码也不能执行. 若此时无其它可运行程序,处理机将被闲置. 多线程结构在一个线程等待时,其它线程可以继续执行,从而使设备和处理机并行工作 ;在多核环境下,多线程可以并行执行,既可提高资源利用效率,又可提高进程推进速度 。3.2 用户级线程和内核级线程用户级线程(用户空间实现)有关线程的所有管理工作都由在用户级实现的线程库来支持 用户级线程特征用户级线程的创建和管理等操作无须内核参与,操作更快 并行性不高,一个线程被系统阻塞后,整个进程被阻塞9用户级线程用户级别线程优点:线程不依

7、赖于操作系统,不必采用标准的调度策略,可以采用与问题相关的调度策略,灵活性好;同一进程中的线程切换不需进入操作系统,因而实现效率较高; 有关线程的所有管理工作都由在用户级实现的线程库来支持。用户级别线程缺点:同一进程中的多个线程不能真正并行;由于线程对操作系统不可见,调度在进程级别,某进程中的一个线程通过系统调用进入操作系统受阻,该进程的其它线程也不能运行 。10内核级线程内核级线程内核级线程的所有管理操作都是由操作系统内核完成的 特点并行性高,多个线程可被同时调度充分利用多处理器创建和管理代价高 11内核级线程核心级别线程的优点是并发性好,在多CPU环境中同一进程中的多个线程可以真正并行执行

8、 核心级别线程的缺点是线程控制和状态转换需要进入操作系统完成,系统开销比较大. 12133.3 多线程的映射模型对于实现了用户级线程和内核级线程的操作系统,用户级线程和内核级线程之间的可以有不同的映射方式:143.3多线程的映射模型多对一模型 多对一模型把多个用户级线程映射到一个内核级线程。用户级线程的管理在用户空间实现,所以效率高。当一个线程因调用系统调用被阻塞时,整个进程被阻塞。另外,用户级线程不能在多处理器上并发执行,不支持内核级线程的操作系统使用多对一模型。一对一模型一对一模型把每个用户级线程映射到一个内核级线程(纯核心级线程) 。当一个线程阻塞时,其他线程仍然可以运行。内核资源会限制

9、系统中线程的数目。例如:Windows 95/98/NT/2000,OS/215多对多模型多对多模型将m个用户级线程映射到n个内核级线程,mn。用户可以创建所需要的用户级线程,通过分配适当数目的内核级线程获得并发执行的优势并节省系统资源。例如:Solaris 2 16线程池多线程编程的问题重复创建和销毁线程,如:网络服务器,长时间重复该过程要耗费大量的处理器时间为每个请求创建一个线程,大量的创建线程可能会耗尽系统资源解决方式:线程池一组被创建的线程的集合,需要线程时从池中取出,使用结束后归还线程池。当线程池中没有可用线程时,创建线程的请求必须等待,保护系统资源不被耗尽。线程池中的线程数目可以依

10、据系统的内存、处理器数目、待处理的任务数目来确定,或者动态地依据系统当前资源和系统负载进行调整。17183.4 线程的生命周期线程的标识通常用一个整数来标识一个线程在Pthred线程库中,以pthread_t类型来标识一个线程。 线程的创建(c程序)首先运行的是从main函数开始的主线程或初始线程在pthread函数库中调用pthread_create创建一个新的线程线程的终止线程的启动函数执行完毕,或者调用了pthread_exit 导致线程终止主线程退出导致整个进程会终止 ,主线程一般会在其它线程退出后再结束。线程的状态线程的状态就绪(ready):线程等待可用的处理器。运行(runnin

11、g):线程正在被执行。阻塞(blocked):线程正在等待某个事件的发生(比如I/O的完成,试图加锁一个被上锁的互斥量)。终止(terminated):线程从起始函数中返回或者调用pthread_exit。19线程状态的转换203.5多线程环境下的进程控制语义21单线程环境下的进程控制接口在多线程环境下语义可能会发生变化,包括进程创建、进程终止、进程执行、信号处理等操作。 进程创建创建进程的系统调用完成后,被创建的新进程复制调用进程的内容,当进程的一个线程中创建一个子进程,新的进程可以复制整个进程(包括所有线程)也可以只复制调用线程的内容;执行新的程序 在进程中执行新的程序,函数的语义在多线程

12、环境下没有发生大的变化。Exec将会终止所有的线程,用新的程序覆盖进程的地址空间,并开始执行新的程序;3.5多线程环境下的进程控制语义22进程结束 在任何一个线程中调用exit将会结束整个进程,另外从主线程返回也等同于调用exit而导致进程结束。如果要从线程中退出则调用专用的线程退出函数。 信号处理信号是unix中系统通知进程的重要机制。信号可能是同步的也可能是异步的。发送给进程的信号在多线程环境下有多种选择:-发送给引发信号的线程; -发送给所有的线程; -发送给特定的线程; -指定一个线程处理所有的信号。 如何递送一个信号取决于信号的类型。 233.6 线程的同步由于线程共享同一进程的内存

13、空间,多个线程可能需要同时访问同一个数据。对共享数据的并发访问如果没有正确的报数措施,可能导致数据的不一致性和错误为避免不确定的错误结果出现,在两个线程访问共享数据的时候需要同步机制竞争条件若干进程并发地访问并且操纵共享数据的情况。共享数据的值取决于哪个进程最后完成防止竞争条件,并发进程必须被同步24线程Producer:counter+register1=counter;register1=register1+1;counter=register1;线程Consumer:counter-register2=counter;register2=register2-1;counter=regis

14、ter2;假定counter的原始值是5,则可能的执行结果: Producer: register1=counter register1=5 Producer: register1=register1+1 register1=6 Consumer: register2=counter register1=5 Consumer: register2=register2-1 register1=4 Producer: counter=register1 counter=6 Consumer: counter=register2 counter=43.5 线程的同步常用的同步机制临界区(critic

15、al section)互斥量(mutex)信号量(simphore)管程(monitor)互斥量互斥量作为一种互斥设备,有两个状态:上锁和空闲对于一个已经被加锁的互斥量,当一个线程试图对它加锁时,该线程会被阻塞,直到该互斥量被释放。互斥量在Pthread线程库中被定义为pthread_mutex_t类型。26互斥量(mutex) Pthread线程库对一个互斥量的加锁操作是:int pthread_mutex_lock(pthread_mutex_t *mutex); int pthread_mutex_trylock(pthread_mutex_t *mutex); producer对cou

16、nter变量的操作要先加锁互斥量,完成对counter的操作之后释放互斥量 pthread_mutex_lock(&counter_mutex); counter+; pthread_mutex_unlock(&counter_mutex); 27互斥量(mutex)这两个函数都可以对一个互斥量加锁,如果互斥量当前是空闲的则被加锁,调用线程持有该互斥量并立即返回。如果该互斥量已经被其他线程加锁,调用 pthread_mutex_lock的线程被阻塞,直到持有该互斥量的线程释放互斥量。释放互斥量:pthread_mutex_unlock(pthread_mutex_t *mutex)信号量Sem

17、aphores信号量被定义为一个整型变量,用两个原子的操作wait和signal来操作信号量wait:当执行wait时,如果信号量的值大于0,wait操作把信号量的值减1并返回;如果当前信号量的值为非正数则执行wait操作的线程会等待。signalsignal操作对信号量的值加1,并唤醒哪些等待的进程 29Multual-exclusion with semaphoresShared data: semaphore mutex; /initially mutex = 1Process Pi: do wait(mutex); critical section signal(mutex); rem

18、ainder section while (1); 30信号量与互斥量对于初始值为1的信号量,成对的wait和signal操作与互斥量的加锁、解锁的功能相似,可以实现多个线程对共享数据的安全访问。和互斥量相比,信号量更加灵活,当信号量的初值大于1时,允许多个线程通过wait操作;信号量的值可以代表某类资源的数目,创建资源的线程调用signal,消耗资源的线程调用wait。32条件变量要等待某个条件成立(如xy),当其他线程改变了共享变量的值时,线程应重新测试该条件 条件变量提供了阻塞线程和唤醒其他线程的方法改变共享变量值的线程,给阻塞在条件变量上的线程发信号,唤醒该线程。条件变量的用法是先测试谓词,若不成立则调用pthread_cond_wait阻塞在该条件变量上。Pthread定义的条件变量类型为pthread_cond_t,在某个条件变量上等待的操作是:int pthread_cond_wait (pthread_cond_t*cond,pthread_mutex_t*mutex); int pthread_cond_s

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论