Linux程序设计——技术技巧与项目实践 教学课件 作者 余有明 编著 第8章.pptVIP

Linux程序设计——技术技巧与项目实践 教学课件 作者 余有明 编著 第8章.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
尚辅网 尚辅网 第八章 线程编程技术 8.1 线程THREAD的内涵 8.2 线程调用 8.3 多线程编程实践 8.3 线程的数据处理 8.4 多线程编程 8.6 实战技巧 拷贝与粘贴的快捷程序 8.1 线程thread的内涵 多线程技术目前已被广泛应用到多种操作系统,如Windows NT和linux等。 在进程之中引入线程,并用多线程处理任务到底有什么好处呢? 多线程的优势之一在于资源。线程比进程节俭。在linux下启动一个新进程必须给它分配独立的地址空间,建立一些数据表维护它的代码段、堆栈段和数据段,代价昂贵。运行一个进程中的多线程,彼此间地址空间相同,共享大部分数据,启动一个线程花费空间远小于进程的花费。线程间彼此切换时间开销很小。统计表明一个进程的开销大约是线程的30倍。 多线程的优势之二是线程间的便捷通信。不同的进程各自具有独立的数据空间,进行数据传递只能通信,费时不方便。同一进程的线程之间因为共享数据空间,一个线程的数据可以直接为其它线程所用,快捷方便。但相应的数据共享会出现一些问题,如有的变量不能同时被两个线程同时修改,声明为static的数据有可能给多线程程序带来灾难性的破坏,这些正是多线程编程时最值得注意的地方。 多线程程序作为多任务并发的工作方式,既能够提高应用程序响应率,又能够让多CPU系统更有效率,还能够改善程序的结构。可以把一个长而复杂的进程分为多个线程,成为独立或半独立的运行部分,便于对程序的理解和修改。 8.2 线程调用 8.2.1 线程的定义 线程(thread)有时被称为轻量级进程(Lightweight Process,LWP),是程序执行流的最小单元。一个标准线程是由线程ID,当前指令指针(PC),寄存器集合和堆栈组成。线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不独立拥有系统资源,只拥有一点在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。一个线程可以创建和撤消另一个线程,同一进程中的多个线程之间可以并发执行。由于线程之间的相互制约,致使线程在运行中呈现出间断性。线程也有就绪、阻塞和运行三种基本状态。 在单个程序中同时运行的多个线程各司其职,各负其责,称为多线程。线程推广了进程的概念使一个进程可以包含多个活动或执行序列等。如今的线程概念广为普及,在linux系统中已经普遍实现了线程机制,并有丰富的线程函数库。使用线程的优点在于可以改进程序的实时响应能力,可以有效地使用多处理器,能够改进程序结构和减少对系统资源的占用。 8.2.2线程的分类 线程有两个基本类型:用户级线程和系统级线程。用户级线程是管理过程全部由用户程序完成的,操作系统内核只对进程进行管理。系统级线程或核心级线程则是由操作系统内核实施管理的。操作系统内核给应用程序提供相应的系统调用和应用程序接口API,使用户程序可以创建、执行、撤消线程。有三种不同的线程库,都想成为线程的标准,它们是WIN32,OS/2和POSIX,前两种是专用的,只能用在它们各自平台上,而POSIX规范则是适用于各种平台,而且已经在包括VMS平台的所有主要linux系统上实现了。 8.2.3 线程的实现 目前的线程实现方法有两种,一是用户态线程,二是核心态线程。 1.用户态线程 由于内核对多线程不支持,因此内核中只有单线程进程,而多线程进程则通过一个和应用程序连接的函数库来实现。由于内核没有轻量级线程概念,不能独立进行调度,而由线程运行库来组织线程的调度,主要工作是在各线程的栈之间调度。如果一个进程中的某个线程调用了一个阻塞的系统调用,该进程就被阻塞,而且该进程中的其它所有线程也同时被阻塞,因此UNIX使用异步I/O机制。主要缺点是在一个进程中的多个线程调度中无法发挥多处理器的优势。优点也很明显:一是线程操作的系统消耗大为减少。如同属于一个进程的线程间的调度切换不需要系统调用,减少了额外的消耗,一个进程可以启动上千个线程都没有什么问题;二是用户态线程的实现方式可以被定制或修改以适应特殊应用的要求。这对于多媒体实时过程等尤其实用。用户态线程可以比核心态线程的默认情况支持更多的线程。 2.核心态线程 允许不同进程中的线程按同一相对优先调度法进行调度,有利于发挥多处理器的并发优势。 目前线程主要的实现方法是用户态线程。有几个研究项目已实现了一些核心态线程形式。其中比较著名的是MACH分布式操作系统。通过允许用户代码对内核线程调度的参与,该系统将用户态和核心态两种线程实现法的优点结合起来。通过提供一个两级调度机制,内核在保留了对处理器时间分配的控制的同时,也使一个进程可以充分利用多处理器的优势。 3.线程库 POSIX线程库和Solaris线程库是目前使用最广泛的线程库。这两种实现方法可以

您可能关注的文档

文档评论(0)

118压缩包课件库 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档