清华计算机系2015暑假小学期课件05-多线程编程技术

上传人:w****i 文档编号:106818073 上传时间:2019-10-16 格式:PDF 页数:62 大小:1.23MB
返回 下载 相关 举报
清华计算机系2015暑假小学期课件05-多线程编程技术_第1页
第1页 / 共62页
清华计算机系2015暑假小学期课件05-多线程编程技术_第2页
第2页 / 共62页
清华计算机系2015暑假小学期课件05-多线程编程技术_第3页
第3页 / 共62页
清华计算机系2015暑假小学期课件05-多线程编程技术_第4页
第4页 / 共62页
清华计算机系2015暑假小学期课件05-多线程编程技术_第5页
第5页 / 共62页
点击查看更多>>
资源描述

《清华计算机系2015暑假小学期课件05-多线程编程技术》由会员分享,可在线阅读,更多相关《清华计算机系2015暑假小学期课件05-多线程编程技术(62页珍藏版)》请在金锄头文库上搜索。

1、第五讲:第五讲:多线程编程技术多线程编程技术 清华大学计算机系清华大学计算机系 1 主要内容主要内容 多任务介绍多任务介绍 进程与线程的概念进程与线程的概念 Windows下多进程编程下多进程编程 Windows下多线程编程下多线程编程 多线程的同步机制多线程的同步机制 QT图形界面与子线程通讯图形界面与子线程通讯 2 并行并行: :古老的思想古老的思想! ! “. 并行计算并不是什么新的思想并行计算并不是什么新的思想,只是将只是将 它扩展应用于计算机而已它扩展应用于计算机而已. 作者也不认为作者也不认为 这种扩展应用会存在什么无法克服的困难这种扩展应用会存在什么无法克服的困难 . 但也不要期

2、待有效的并行编程方法与技但也不要期待有效的并行编程方法与技 术能够在一夜之间诞生术能够在一夜之间诞生. 期间还需要有许期间还需要有许 多的工作和实验要做多的工作和实验要做. 毕竟毕竟, 今天的编程技今天的编程技 术术(串行串行)是若干年来艰苦的探索才取得的是若干年来艰苦的探索才取得的. 现在编程工作似乎成了一种令人单调乏味现在编程工作似乎成了一种令人单调乏味 的工作的工作,事实上事实上,并行编程的出现将会使重并行编程的出现将会使重 新恢复编程工作者们的探索精神新恢复编程工作者们的探索精神 .” (Gill, S. (1958), “Parallel Programming,” The Comp

3、uter Journal, vol. 1, April, pp. 2-10.) Parallel Programming with MPI by Peter Pacheco(2000) 1 1、什么是多任务并行、什么是多任务并行 什么是多任务,生活中很常见什么是多任务,生活中很常见 妈妈:一边织毛衣,一边看电视妈妈:一边织毛衣,一边看电视 售货员:招呼多个顾客看货、购物售货员:招呼多个顾客看货、购物 同学们:同时应付多门课的作业同学们:同时应付多门课的作业 计算机计算机为什么为什么需要支持多任务需要支持多任务? 大型机器:需要同时服务多位用户大型机器:需要同时服务多位用户 个人机器:同时有多个

4、需求:听歌、上网个人机器:同时有多个需求:听歌、上网 计算机计算机为什么为什么能支持多任务能支持多任务 CPU资源大量富余资源大量富余 memory/disk等设备速度很慢等设备速度很慢 运行单个任务,会经常有大量资源闲置运行单个任务,会经常有大量资源闲置 4 多任务的交互多任务的交互竞争与协作竞争与协作 竞争竞争关系关系 多个任务共多个任务共用一套资源用一套资源,因而出现因而出现多个任务竞争资源多个任务竞争资源的情况。的情况。 任务的互斥任务的互斥(Mutual Exclusion)是是解决进程间竞争关系的手段解决进程间竞争关系的手段 协作关系协作关系 多个子任务多个子任务为完成同一任务需要

5、分工为完成同一任务需要分工协作,一个子任务的继续执协作,一个子任务的继续执 行依赖于另一个子任务的执行状态行依赖于另一个子任务的执行状态 任务的同步任务的同步(Synchronization)是是解决任务间协作关系的手段解决任务间协作关系的手段。 主要内容主要内容 多任务介绍多任务介绍 进程与线程的概念进程与线程的概念 Windows下多进程编程下多进程编程 Windows下多线程编程下多线程编程 多线程的同步机制多线程的同步机制 6 2 2、基本概念:程序、基本概念:程序 程序程序通常是指一个通常是指一个 可供计算机执行的可供计算机执行的 文件。文件。 最常见的最常见的是以是以exe 或者或

6、者com作为扩展作为扩展 名的文件。名的文件。 7 2 2、基本概念:进程、基本概念:进程 程序程序是静态的概念,是静态的概念,进程进程是程序的动态概念。是程序的动态概念。 进程是进程是应用程序的执行应用程序的执行实例,描述程序的执行状态。实例,描述程序的执行状态。 一个以一个以exe作为扩展名的文件,在没有被执行的时候作为扩展名的文件,在没有被执行的时候称称 之为之为应用程序应用程序。当。当用鼠标双击执行以后,就被操作系统用鼠标双击执行以后,就被操作系统 作为作为进程进程来管理了来管理了。 当关机或者在任务栏的图标上单击鼠标右键选“退出”当关机或者在任务栏的图标上单击鼠标右键选“退出” 时,

7、进程便消亡,彻底结束了生命时,进程便消亡,彻底结束了生命。 8 2 2、WindowsWindows任务管理器任务管理器进程进程 9 进程的并发性进程的并发性 宏观上,宏观上,所有进程都是并发运行的所有进程都是并发运行的。 微观上,微观上,除非是多处理器,否则不可能有两个进程在除非是多处理器,否则不可能有两个进程在 同时运行同时运行。具体方法是。具体方法是时间片轮转时间片轮转:一个进程运行一:一个进程运行一 个时间片,就把个时间片,就把CPU让出来让另一个进程运行。因为让出来让另一个进程运行。因为 时间片很小,所以用户看起来所有进程都在运行。时间片很小,所以用户看起来所有进程都在运行。 任何任

8、何两个不相关的进程两个不相关的进程其推进速度可能是任意的。其推进速度可能是任意的。 并发带来的并发带来的好处好处 很很明显的好处明显的好处:可以让多个用户分享:可以让多个用户分享CPU。对单用户而。对单用户而 言,也可同时运行多个程序,如一边上网一边言,也可同时运行多个程序,如一边上网一边QQ。 更深更深层次的好处层次的好处:充分利用:充分利用CPU资源。资源。 当一个进程在等待数据时当一个进程在等待数据时(来自网络(来自网络,外部设备等),其它进,外部设备等),其它进 程可占用程可占用CPU。 并发带来并发带来的挑战的挑战 挑战:并不是所有的事情都可以同时做。挑战:并不是所有的事情都可以同时

9、做。 两两个进程同时写一个文件,对于普通文件,文件某一个个进程同时写一个文件,对于普通文件,文件某一个 位置上的内容是最后一次写入的结果。好像还不太糟。位置上的内容是最后一次写入的结果。好像还不太糟。 但但如果这个文件是一台打印机那将会怎么样?可以想像如果这个文件是一台打印机那将会怎么样?可以想像 打印出来的东西将不是任何一个进程想得到的。打印出来的东西将不是任何一个进程想得到的。 数据数据的的不一致性不一致性 数据的不一致性数据的不一致性 例:多个进程通过共享例:多个进程通过共享内存实现通信,内存实现通信,共享一块物理地共享一块物理地 址址。 每个每个进程都进程都通过通过 int*p 映射映

10、射到这块物理地址。进程每到这块物理地址。进程每 次获取一个网页,调用次获取一个网页,调用*p=*p1。最后。最后*p的值就是多个的值就是多个 进程获取到的网页进程获取到的网页总和。总和。 数据的不一致性数据的不一致性 进程进程1 mov eax, p inc eax mov p, eax 进程进程2 mov eax, p inc eax mov p, eax 结果不是我们想要的,结果不是我们想要的,*p只被加了只被加了1! 数据的不一致性数据的不一致性 因为因为*p是共享资源,因此对它写操作应该是互斥的。访是共享资源,因此对它写操作应该是互斥的。访 问文件也是类似。问文件也是类似。 不加同步控

11、制的多进程程序,运行结果是不可预知的。不加同步控制的多进程程序,运行结果是不可预知的。 在在编写多进程或多线程程序时应当特别注意编写多进程或多线程程序时应当特别注意。 引入多线程技术的动机引入多线程技术的动机 进程进程切换开销切换开销大大,频繁的进程调度将耗费大量处理器时,频繁的进程调度将耗费大量处理器时 间间 进程间通信代价进程间通信代价大大,每次通信均要涉及通信进程之间以,每次通信均要涉及通信进程之间以 及通信进程与操作系统之间的切换及通信进程与操作系统之间的切换。 进程间进程间的的并发粒度并发粒度较粗较粗,并发度不高,并发度不高。过多。过多的进程切换的进程切换 和通信使得细粒度的并发得不

12、偿失和通信使得细粒度的并发得不偿失。 轻量级进程(轻量级进程(Light Weight Process) 线程线程(Thread) 2 2、基本概念:线程、基本概念:线程 线程线程是进程是进程的执行单元,一个进程内可以有多个线程的执行单元,一个进程内可以有多个线程 进程所具有的动态含义进程所具有的动态含义,是通过线程来体现的。,是通过线程来体现的。 17 2 2、进程、进程 vsvs 线程线程 进程进程是系统中程序执行和资源分配的基本单位是系统中程序执行和资源分配的基本单位 每个进程有每个进程有自己的数据段、代码段和堆栈段自己的数据段、代码段和堆栈段 “独立地址空间”是指各个进程都有自己的虚拟

13、地址空“独立地址空间”是指各个进程都有自己的虚拟地址空 间(在间(在Linux下为下为0x0-0xbfffffff),而且任何进程都只),而且任何进程都只 能访问到自己的虚拟地址空间。能访问到自己的虚拟地址空间。 线程线程通常叫做轻量级进程。线程是在共享内存空间中并通常叫做轻量级进程。线程是在共享内存空间中并 发执行的多道执行路径发执行的多道执行路径 多个线程共享一个进程的资源多个线程共享一个进程的资源 因为线程和进程比起来很小,所以相对来说,线程花费因为线程和进程比起来很小,所以相对来说,线程花费 更少的更少的CPU资源。资源。 18 线程内存映象和内容线程内存映象和内容 线程存在于进程之中

14、,除了堆栈和线程存在于进程之中,除了堆栈和CPU状态外,全部数据是状态外,全部数据是 共享的共享的 2 2、用户级线程、用户级线程 vsvs 内核级线程内核级线程 线程按照其调度者可分为两种:线程按照其调度者可分为两种: (1)用户级线程:主要解决的是上下文切换的问题,其调度算法)用户级线程:主要解决的是上下文切换的问题,其调度算法 和调度过程全部由用户决定。和调度过程全部由用户决定。 (2)内核级线程:由内核调度机制实现。)内核级线程:由内核调度机制实现。 现在大多数操作系统都采用用户级线程和内核级线程并现在大多数操作系统都采用用户级线程和内核级线程并 存的方法。存的方法。 用户级线程可与内

15、核级线程实现“一对一”、“一对多用户级线程可与内核级线程实现“一对一”、“一对多 ”的对应关系。”的对应关系。 20 线程的实现方法线程的实现方法 从实现的角度看,线程可以分成用户级线程从实现的角度看,线程可以分成用户级线程ULT(如,如,Java和和 Informix)和内核级线程和内核级线程KLT(如如OS/2)。也有一些系统。也有一些系统(如,如,Solaris)提提 供了混合式线程,同时支持两种线程实现供了混合式线程,同时支持两种线程实现 主要内容主要内容 多任务介绍多任务介绍 进程与线程的概念进程与线程的概念 Windows下多进程编程下多进程编程 Windows下多线程编程下多线程

16、编程 多线程的同步机制多线程的同步机制 22 多进程编程多进程编程 MFC没有提供类处理进程,直接使用没有提供类处理进程,直接使用Win32 API函数。函数。 进程的创建进程的创建 调用调用CreateProcess函数创建新的进程,运行指定的程函数创建新的进程,运行指定的程 序。序。 CreateProcess的原型如下:的原型如下: BOOL CreateProcess( LPCTSTR lpApplicationName, / 可执行模块名可执行模块名 LPTSTR lpCommandLine, / 命令行字符串命令行字符串 LPSECURITY_ATTRIBUTES lpProcessAttributes, / 进程的安全属性进程的安全属性 LPSECURITY_ATTRI

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号