线程的概念和多线程模子

线程的根本概念

引入过程的目标,是为了使多道程序并发履行,以进步资本应用率和零碎吞吐量;而引入线程,则是为了减小程序在并发履行时所支付的时空开支,进步操作零碎的并发功能。
线程最直接的了解就是“轻量级过程”,它是一个根本的CPU履行单位,也是程序履行流的最小单位,由线程ID、程序计数器、存放器聚集和客栈构成。线程是过程中的一个实体,是被零碎自力调剂和分配的根本单元,线程本人不具有零碎资本,只具有一点在运转中必弗成少的资本,但它可与同属一个过程的其他线程共享过程所具有的全体资本。一个线程可以创立和撤销另一个线程,统一过程中的多个线程之间可以并发履行。因为线程之间的互相制约,致使线程在运转中出现出连续性。线程也有停当、壅塞和运转三种根本形态。
引入线程后,过程的外延发作了改动,过程只作为除CPU之外零碎资本的分派单位,线程则作为处置机的分派单位。

线程与过程的比拟

1) 调剂。在传统的操作零碎中,具有资本和自力调剂的根本单元多是过程。在引入线程的操作零碎中,线程是自力调剂的根本单元,过程是资本具有的根本单元。在统一过程中,线程的切换不会惹起过程切换。在分歧过程中停止线程切换,如从一个过程内的线程切换到另一个过程中的线程时,会惹起过程切换。
2) 具有资本。不管是传统操作零碎照样设有线程的操作零碎,过程多是具有资本的根本单元,而线程不具有零碎资本(也有一点必弗成少的资本),但线程可以拜访其从属过程的零碎资本。
3) 并发性。在引入线程的操作零碎中,不只过程之间可以并发履行,并且多个线程之间也可以并发履行,从而使操作零碎具有更好的并发性,进步了零碎的吞吐量。
4) 零碎开支。因为创立或撤销过程时,零碎都要为之分派或收受接管资本,如内存空间、 I/O装备等,因而操作零碎所支付的开支弘远于创立或撤销线程时的开支。相似地,在停止过程切换时,触及以后履行过程CPU情况的保管及新调剂到过程CPU情况的设置,而线程切换时只需保管和设置大批存放器内容,开支很小。此外,因为统一过程内的多个线程共享过程的地址空间,因而,这些线程之间的同步与通讯十分轻易完成,乃至无需操作零碎的干涉。
5) 地址空间和其他资本(如翻开的文件):过程的地址空间之间相互自力,统一过程的各线程间共享过程的资本,某过程内的线程关于其他过程弗成见。
6) 通讯方面:过程间通讯(IPC)需求过程同步和互斥手腕的辅佐,以包管数据的分歧性,而线程间可以直接读/写过程数据段(如全局变量)来停止通讯。

线程的属性

在多线程操作零碎中,把线程作为自力运转(或调剂)的根本单元,此时的过程,已不再是一个根本的可履行实体。但过程仍具有与履行相干的形态,所谓过程处于“履行”形态,实践上是指该过程中某线程正在履行。线程的次要属性如下:

  1. 线程是一个轻型实体,它不具有零碎资本,但每一个线程都应有一个独一的标识符和一个线程掌握块,线程掌握块记载了线程履行的存放器和栈等现场形态。
  2. 分歧的线程可以履行相反的程序,即统一个效劳程序被分歧的用户挪用时,操作零碎为它们创立成分歧的线程。
  3. 统一过程中的各个线程共享该过程所具有的资本。
  4. 线程是处置机的自力调剂单元,多个线程是可以并发履行的。在单CPU的盘算机零碎中,各线程可瓜代地占用CPU;在多CPU的盘算机零碎中,各线程可同时占用分歧的CPU,若各个CPU同时为一个过程内的各线程效劳则可延长过程的处置工夫。
  5. —个线程被创立后便开端了它的生命周期,直至终止,线程在生命周期内会阅历壅塞态、停当态和运转态等各类形态变更。

线程的完成方法

线程的完成可以分为两类:用户级线程(User-LevelThread, ULT)和内核级线程(Kemel-LevelThread,  KLT)。内核级线程又称为内核支撑的线程。
在用户级线程中,有关线程治理的一切任务都由使用程序完成,内核认识不到线程的存在。使用程序可以经过运用线程库设计成多线程程序。平日,使用程序从单线程肇端,在该线程中开端运转,在其运转的任何时辰,可以经过挪用线程库中的派生例程创立一个在相反过程中运转的新线程。图2-2(a)阐明了用户级线程的完成方法。
在内核级线程中,线程治理的一切任务由内核完成,使用程序没有停止线程治理的代码,只要一个到内核级线程的编程接口。内核为过程及其外部的每一个线程保护上下文信息,调剂也是在内核基于线程架构的根底上完成。图2-2(b)阐明了内核级线程的完成方法。
在一些零碎中,运用组合方法的多线程完成。线程创立完整在用户空间中完成,线程的调剂和同步也在使用程序中停止。一个使用程序中的多个用户级线程被映射到一些(小于或等于用户级线程的数量)内核级线程上。图2-2(c)阐明了用户级与内核级的组合完成方法。


图2-2用户级和内核级线程

多线程模子

有些零碎同时支撑用户线程和内核线程由此发生了分歧的多线程模子,即完成用户级线程和内核级线程的衔接方法。

1) 多对一模子

将多个用户级线程映射到一个内核级线程,线程治理在用户空间完成。
此形式中,用户级线程对操作零碎弗成见(即通明)。
长处:线程治理是在用户空间停止的,因此效力比拟高。
缺陷:当一个线程在运用内核效劳时被壅塞,那么全部过程都邑被壅塞;多个线程不克不及并行地运转在多处置机上。

2) 一对一模子

将每一个用户级线程映射到一个内核级线程。
长处:当一个线程被壅塞后,许可另一个线程持续履行,所以并发才能较强。
缺陷:每创立一个用户级线程都需求创立一个内核级线程与其对应,如许创立线程的开支比拟大,会影响到使用程序的功能。

3) 多对多模子

将 n 个用户级线程映射到 m 个内核级线程上,请求 m <= n。
特色:在多对一模子和一对一模子中取了个折中,克制了多对一模子的并发度不高的缺陷,又克制了一对一模子的一个用户过程占用太多内核级线程,开支太大的缺陷。又具有多对一模子和一对一模子各自的长处,可谓集两者之所长。

时间: 2024-11-09 14:46:10

线程的概念和多线程模子的相关文章

线程的概念和多线程模型

线程的基本概念 引入进程的目的,是为了使多道程序并发执行,以提高资源利用率和系统吞吐量:而引入线程,则是为了减小程序在并发执行时所付出的时空开销,提高操作系统的并发性能. 线程最直接的理解就是“轻量级进程”,它是一个基本的CPU执行单元,也是程序执行流的最小单元,由线程ID.程序计数器.寄存器集合和堆栈组成.线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点在运行中必不可少的资源,但它可与同属一个进程的其他线程共享进程所拥有的全部资源.一个线程可以创建和

再谈多线程编程(一)——线程的概念、多线程的创建、守护线程、线程状态的转化

1.什么是线程以及多线程与进程的区别 在现代操作在运行一个程序时,会为其创建一个进程.例如启动一个QQ程序,操作系统就会为其创建一个进程.而操作系统中调度的最小单位元是线程,也叫轻量级进程,在一个进程里可以创建多个线程,这些线程都拥有各自的计数器,堆栈和局部变量等属性,并且能够访问共享的内存变量.处理器在这些线程上高速切换,让使用者感觉到这些线程在同时执行.因此我们可以这样理解: 进程:正在运行的程序,是系统进行资源分配和调用的独立单位.每一个进程都有它自己的内存空间和系统资源. 线程:是进程中

Java的多线程 --线程的概念

Java的多线程--线程的概念 一个程序同时执行多个任务,通常,每个任务称之为线程(thread),她是线程控制的简称. 可以运行一个以上的任务的程序叫做多线程程序. 1.感觉线程和进程很像,那么他们的区别是什么? 其实他们是有本质的区别:每个进程拥有自己独立的一整套变量,而线程则共享数据. 2.在Java中怎么创建一个线程去执行一个任务. 主要有4个步骤. 1)将任务代码移到实现了Runnable接口类的run方法中,这个接口很简单,只有一个方法. public interface Runna

Java - 线程基本概念

[java并发编程实战]-----线程基本概念 线程状态图 说明:线程共包括以下5种状态.1. 新建状态(New)         : 线程对象被创建后,就进入了新建状态.例如,Thread thread = new Thread().2. 就绪状态(Runnable): 也被称为"可执行状态".线程对象被创建后,其它线程调用了该对象的start()方法,从而来启动该线程.例如,thread.start().处于就绪状态的线程,随时可能被CPU调度执行.3. 运行状态(Running)

Java 线程?基本概念 可见性 同步

开发高性能并发应用不是一件容易的事情.这类应用的例子包括高性能Web服务器.游戏服务器和搜索引擎爬虫等.这样的应用可能需要同时处理成千上万个请求.对于这样的应用,一般采用多线程或事件驱动的架构.对于Java来说,在语言内部提供了线程的支持.但是Java的多线程应用开发会遇到很多问题.首先是很难编写正确,其次是很难测试是否正确,最后是出现问题时很难调试.一个多线程应用可能运行了好几天都没问题,然后突然就出现了问题,之后却又无法再次重现出来.如果在正确性之外,还需要考虑应用的吞吐量和性能优化的话,就

全面理解进程和线程的概念、区别和联系

进程(process)和线程(thread)是操作系统的基本概念,但是它们比较抽象,不容易掌握. 最近,我读到一篇材料,发现有一个很好的类比,可以把它们解释地清晰易懂. 进程与线程的一个简单解释 在这个简单易懂的类比下,了解一下进程和线程的宏观概念: 进程,是并发执行的程序在执行过程中分配和管理资源的基本单位,是一个动态概念,竟争计算机系统资源的基本单位.每一个进程都有一个自己的地址空间,即进程空间或(虚空间).进程空间的大小 只与处理机的位数有关,一个 16 位长处理机的进程空间大小为 216

JAVA线程的概念详解

和其他多数计算机语言不同,Java内置支持多线程编程(multithreaded programming). 多线程程序包含两条或两条以上并发运行的部分.程序中每个这样的部分都叫一个线程(thread),每个线程都有独立的执行路径.因此,多线程是多任务处理的一种特殊形式. 你一定知道多任务处理,因为它实际上被所有的现代操作系统所支持.然而,多任务处理有两种截然不同的类型:基于进程的和基于线程的.认识两者的不同是十分重要的. 对很多读者,基于进程的多任务处理是更熟悉的形式.进程(process)本

线程的概念

线程的基本概念 引入进程的目的,是为了使多道程序并发执行,以提高资源利用率和系统吞吐量:而引入线程,则是为了减小程序在并发执行时所付出的时空开销,提高操作系统的并发性能. 线程最直接的理解就是“轻量级进程”,它是一个基本的CPU执行单元,也是程序执行流的最小单元,由线程ID.程序计数器.寄存器集合和堆栈组成.线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点在运行中必不可少的资源,但它可与同属一个进程的其他线程共享进程所拥有的全部资源. 引入线程后,进程

线程详细概念

一.概述 在windows中,每一个打开运行的应用程序或后台程序,比如运行中的QQ.谷歌浏览器.网易云音乐.资源管理器等都是一个进程.我们感觉这些程序是"同时"运行的,但实际上,一个处理器同一时刻只能运行一个进程,只是CPU在高速轮换执行让我们有这样的错觉,我们感受不到中断的原因是CPU执行速度相对于我们的感觉实在是太快了. 我们学c,写java,大部分时候做的都是单线程的编程.只有一条顺序执行的主线--程序从main方法开始,依次执行代码,直到执行完全部代码,除非某一行代码出错导致主