- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
并行计算与多核程序设计_陈天洲_线程的基本概念
第三章 线程的基本概念-web课件
首页上一页下一页末页返回???
多线程的概念
线程(thread)是进程上下文(contex)中执行的代码序列,又被称为轻量级进程(light weight process),是操作系统中比进程更小的可执行单元。
在支持多线程的系统中,进程成为资源分配和保护的实体,而线程是被调度执行的基本单元。进程的资源包括进程的地址空间,打开的文件和I/O等资源。属于同一个进程的线程共享该进程的代码段和数据段,打开的文件,信号等。除了共享资源,每个线程还包含各自的线程ID,线程执行状态,CPU寄存器状态和栈。
多线程机制的优点包括以下几个方面:
1.创建一个线程比创建一个进程的代价要小。由于线程共享进程的资源,所以进程被创建时不需要再分配内存空间等资源,因而创建线程所需的时间也更少。
2.线程的切换比进程间的切换代价小。线程作为执行单元,当从同一进程的一个线程切换到另一线程时,需要载入的信息比进程切换时要少,所以切换速度更快。
3.充分利用多处理器。同一进程的线程可以在多个处理器并行运行,该进程的运行速度可以显著提高,而单线程的进程却只能在一个处理器上运行,不能充分利用多个处理器。
4.数据共享。对于同一进程的线程来说,他们共享同一块地址空间,可以访问相同的数据。数据共享使得线程之间的通信比进程间的通信更高效,更容易。
5.快速响应特性。对于交互程序来说,多线程设计的优势是,当执行一些耗时或者可能被阻塞的操作时,其他部分仍然保持运行和响应。
另外多线程编程可以使程序更加模块化,简化程序逻辑。
用户级线程
用户级线程库是用于用户级线程管理的例程包,支持线程的创建、终止,以及调度线程的执行并保存和恢复线程的上下文,这些操作都在用户空间进行,无需内核的支持,所以用户级线程的创建和管理等操作更快。对于那些内核本身不支持多线程的操作系统,通过用户级线程库可以使用户获得多线程编程的好处。
内核仍然以进程为单位进行调度,当内核调度一个进程运行时,用户级线程库调度该进程的一个线程执行,如果时间片允许,进程的其他线程也可能被执行,该进程的多个线程共享该进程的运行时间片,因而用户级线程的并行性会受到一定的限制。
内核级线程
内核级线程的所有管理操作都是由操作系统内核完成的。内核保存线程的状态和上下文信息,当一个线程执行了引起阻塞的系统调用时,内核可以调度该进程的其他线程执行。在多处理器系统上,内核可以分派属于同一进程的多个线程在多个处理器上运行,提高进程执行的并行度。
由于需要内核完成线程的创建,调度和管理,所以和用户级线程相比这些操作要慢的多,但是仍然比进程的创建和管理操作要快。
多线程的映射模型
对于实现了用户级线程和内核级线程的操作系统,用户级线程和内核级线程之间的可以有不同的映射方式。
多对一模型:多对一模型把多个用户级线程映射到一个内核级线程。线程的管理在用户空间实现,所以效率高。当一个线程因调用系统调用被阻塞时,整个进程被阻塞。另外,用户级线程线程不能在多处理器上并发执行。不支持内核级线程的操作系统使用多对一模型。
一对一模型:一对一模型把每个用户级线程影射到一个内核级线程。该模型允许进程的多个进程再多处理器上并行运行,当一个线程阻塞时,其他线程仍然可以运行。该模型的缺点是当创建一个用户线程时,需要创建对应得内核级线程。由于内核资源的有限性,系统能够通常会限制系统中线程的数目。
多对多模型:多对多模型将m个用户级线程影射到n个内核级线程,m≥n。内核级线程的数目依据应用程序的类型(要求高并发)、机器体系结构(多处理器或单处理器)或者当前系统资源的约束来确定。虽然多对一模型对创建用户级线程的数目没有限制,但这些线程在同一时刻只能有一个被执行。一对一模型可以获得高并发性,但因耗费资源而线程数会受到限制。多对多模型具有多对一和一对一两种模型的优势,用户可以创建所需要的用户级线程,通过分配适当数目的内核级线程获得并发执行的优势并节省系统资源。
多对多映射
多线程编程的个问题:1)需要重复创建和销毁线程,比如一个网络服务器根据用户的请求不断地创建线程,然后销毁线程,长时间重复这一过程要耗费大量的处理器时间;2)如果为每个请求建立一个线程而对线程数目没有限制的话,大量创建的线程可能会耗尽系统资源。
线程池是一组被创建的线程的集合,当一个进程需要线程时,如果线程池中还有可用的线程,就从中取出一个投入使用。当线程池中没有可用的线程时,创建线程的请求必须等待,保护系统资源不被耗尽。线程池中的线程数目可以依据系统的内存,处理器数目,要处理的任务的数目来确定,或者动态地依据系统当前的资源和系统负载进行调整。
线程的生命周期
1、 线程的标识
通常用一个整数来标识一个线程,在pthread线程库中,以pthrea
文档评论(0)