线程基础

线程是程序执行流和CPU调度的最小单元,一个进程通常由多个线程组成,它们共享内存空间及部分资源。多线程能够提高程序并发性,有效利用等待时间,提升用户体验。线程有运行、就绪和等待三种状态,线程调度涉及优先级和抢占机制。线程的访问权限相对自由,但也有私有存储空间。在Linux中,线程是进程内的执行实体,线程安全是多线程编程的重要概念,通过锁、信号量等同步机制保证数据一致性。
摘要由CSDN通过智能技术生成

除了进程之外,线程是一个十分重要的概念,特别是随着CPU频率增长开始出现停滞,而开始往多核方向发展,多线程,作为实现软件的并发执行的一个重要方法,有着越来越重要的地位。

一、什么是线程

线程(Thread),有时也叫轻量级进程(LWP),是程序执行流和CPU调度的最小单元。一个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆栈组成。通常意义上讲,一个进程由多个线程组成,各个线程之间共享程序的内存空间(包括代码段,数据段,堆等)及一些进程级的资源(如打开文件和信号),一个进程和线程的经典关系如下:

                                  

大多数应用中,线程的数量不止一个,多个线程可以互不干扰的并发执行,并共享进程的全局变量,那么多线程的进程和单线程的进程相比,优势如下:

(1)某个操作可能会陷入长时间的等待,等待的线程会进入睡眠状态,无法继续执行,多线程可以有效的利用等待的时间,典型的例子是等待网络响应,这可能花费数秒或数十秒。

(2)某个操作(比如计算)可能花费较长时间,如果只有一个线程,程序和用户之间的交互将会中断,多线程可以让另一个线程进行交互,另一个线程进行计算。

(3)程序逻辑本身就要求并发操作,例如下载多端下载软件。

(4)多CPU或多核计算机(这种基本就是未来的主流计算机),本身具备了同时执行多个线程的能力,单线程无法发挥其本身能力。

(5)相对于多进程的应用,多线程在数据共享方面效率更高。

二、线程的访问权限

线程的访问时比较自由的,他可以访问进程内存里的所有数据,甚至包括其他线程里的堆栈(如果他知道其他线程的堆栈地址的话,这只是很少见的情况),但实际运用中线程也拥有自己的私有存储空间,包括以下几个方面:

(1)栈(尽管并非完全不被其他线程访问,但一般情况下仍然认为是线程私有的)

(2)线程局部存储(TLS),线程局部存储是某些操作系统为线程单独提供的存储空间,但通常只具有很小的容量。

(3)寄存器(包括PC寄存器)寄存器是执行流的基本数据,因此为线程私有。

以上为线程私有的,而线程之间共享的有:全局变量,堆上的数据,函数里的静态变量,程序代码(任何线程都有权利读取并执行任何代码),打开的文件(比如A线程打开的文件可以由B线程读写)

三、线程的调度与优先级

无论是多处理器还是单处理器的计算机,线程总是并发执行,当线程的数量小于处理器数量时(并且操作系统支持多处理器),线程的并发是真正意义上的并发,不同线程运行在不同的处理器上,彼此互不相。而当线程数量大于处理器数量时,线程的并发会受到一些阻碍,此时至少有一个处理器会运行多个线程。

在单处理器对应多线程的情况下,并发是一种模拟出来的状态,操作系统会让这些多线程轮流执行,每次仅执行一小段时间(通常是几十到几百毫秒)这样每个线程就看起来在同时执行。这样的一个不断在处理器上切换不同线程的行为称为线程调度。在线程调度中,线程至少有三种状态(进程也有类似的三种状态):

(1)运行:线程正在运行

(2)就绪:此时线程可以立即执行,但CPU已经被占用

(3)等待:此时线程正在等待某一事件(通常是I/O或同步)发生,无法执行。

处于运行中的线程有一段可以执行的时间,这段时间称为时间片,当时间片用尽的时候,该线程将进入就绪状态,如果在时间片用尽之前进程就开始等待某事件,那么它将进入等待状态,每当一个线程离开运行状态时,调度系统就会选择一个其他就绪的线程继续执行,在一个处于等待状态的线程所等待的事件发生之后,该线程就进入就绪状态。

线程调度自多任务操作系统问世以来被不断提出不同方案和算法。现在主流的调度方法尽管不同,但都带有优先级调度和轮转法的痕迹。所谓轮转法,就是上面提到的让每一个线程都执行一小段时间。这决定了线程之间交错执行的特点。而优先级调度则决定了线程按什么顺序轮流执行。在具有优先级调度的系统中,线程都有各自的线程优先级。具有高优先级调度的线程会更早的执行,而低优先级的线程通常要等待系统中已经没有更高优先级的可执行线程存在时才能执行。在windows中,可以通过使用:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值