线程介绍
什么是线程:
线程是操作系统能内够进行运算、执行的最小单位,它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。
总结:线程是进程的一部分,是进程内负责执行的单位,进程是由资源单位(内存资源、信号处理方案、文件表)+执行单位组成,默认情况下进程内只有一个线程,但可以有多个。
线程的发展简史:
60年代,在操作系统中能拥有资源和独立运行的基本单位是进程。
随着计算机技术的发展,进程出现了很多弊端:
一是由于进程是资源拥有者,创建、撤消与切换存在较大的时间开销,因此需要引入轻型进程;
二是由于对称多处理机出现,可以满足多个运行单位,而多个进程并行开销过大。
因此在80年代,出现了能独立运行的基本单位——线程(Threads)。
线程的调度策略:
线程是独立调度和分派的基本单位,有三种不同的调试策略:
1、线程可以为操作系统内核调度的内核线程,如Win32线程;
2、由用户进行自行调度的用户线程,如Linux、UNIX平台的POSIX Thread;
3、由内核与用户进程进行混合调度,如Windows 7的线程。
多线程适用的范围:
一个进程可以有很多线程,每条线程并行执行不同的任务。 在多核或多CPU,或支持Hyper-threading的CPU上使用多线程程序设计的好处是显而易见,即提高了程序的执行吞吐率。
在单CPU单核的计算机上,使用多线程技术,可以把进程中负责I/O处理、人机交互而常被阻塞的部分与密集计算的部分分开来执行,原因就是线程占用的资源少,被阻塞时不浪费资源。
线程的特点:
轻型实体:
线程中的实体基本上不拥有系统资源,只是有一点必不可少的、能保证独立运行的资源。线程的实体包括用于指示被执行指令序列的程序计数器、局部变量、状态参数和返回地址。
线程是动态概念,它的动态特性由线程控制块TCB(Thread Control Block)描述,包括以下信息:
1、线程状态
2、当线程不运行时,被保存的现场资源。
3、一组执行堆栈
4、存放每个线程的局部变量主存区
5、访问同一个进程中的主存和其它资源
独立调度和分派的基本单位:
在多线程OS中,线程是能独立运行的基本单位,因而也是独立调度和分派的基本单位。由于线程很“轻”,故线程的切换非常迅速且开销小(在同一进程中的)。
可并发执行:
在一个进程中的多个线程之间,可以并发执行,甚至允许在一个进程中所有线程都能并发执行;同样,不同进程中的线程也能并发执行,充分利用和发挥了CPU与外围设备并行工作的能力。
共享进程资源:
在同一进程中的各个线程,都可以访问该进程的用户空间,此外,还可以访问进程所拥有的已打开文件、定时器、信号量等,线程可以共享该进程所拥有的资源。所以线程之间互相通信不必调用内核。