线程和多线程模型、线程和进程的区别和联系

目录

    • 线程的基本概念
    • 线程与进程的比较
    • 线程的属性

线程的基本概念

引入进程的概念的目的就是更好地使多道程序并发执行,提高资源利用率和系统吞吐量;而引入线程的目的则是减少程序在并发执行时所付出的时空开销,提高操作系统的并发性能

线程最直接的理解就是“轻量级进程”,它是一个基本的CPU执行单元,也是程序执行流的最小单元,有线程ID、程序计数器、寄存器集合和堆栈组成。线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源,但它可与同属一个进程的其他线程共享进程所拥有的全部资源。一个线程可以创建和撤销另一个线程,同一进程中的多个线程可以并发执行。由于线程之间的制约,致使线程在运行中呈现间断性。线程也有就绪、阻塞和运行三种基本状态

引入进程后,进程的内涵发生了变化,进程只作为除CPU外的系统资源的分配单位,而线程则作为处理机的分配单位。由于一个进程内部有多个线程,若线程的切换发生在同一个进程内部,则只需要很少的时空开销。下面从几个方面对线程和进程进行比较

线程与进程的比较

1:调度。在传统的操作系统中,拥有资源和独立调度的基本单位都是进程,每次调度都要进程上下文切换,开销较大。在引入线程的操作系统中,线程是独立调度的基本单位,而线程切换的代价远低于进程。在同一进程中,线程的切换不会引起线程切换。但从一个进程中的线程切换到另一个进程中的线程时,会引起进程切换

2:并发性。在引入线程的操作系统中,不仅进程之间可以并发执行,而且一个进程中的多个线程之间亦可并发执行,甚至不同进程中的线程也能并发执行,从而使操作系统具有更好的并发性

3:拥有资源。进程是系统中拥有资源的基本单位,而线程不拥有资源(仅有一点必不可少、能保证独立运行的资源),但线程可以访问其隶属进程的系统资源,这主要表现在属于同一进程的所有线程都具有相同的地址空间。要知道,若线程也是拥有资源的单位,则切换线程就需要较大的时空开销,线程这个概念的提出就没有意义

4:独立性。每个进程都拥有独立的地址空间和资源,除了共享全局变量,不允许其他基础讷航访问。某进程中的线程对其他进程不可见。同一进程中的不同线程是为了提高并发性能及进程相互之间的合作而创建的,他们共享进程的地址空间和资源

5:系统开销。在创建或撤销进程时,系统都要为之分配或回收进程控制块PCB及其他资源,如内存空间、IO设备等。操作系统为此付出的开销,明显大于创建或撤销线程的开销。类似的,在进程切换时涉及进程的上下文切换,而线程切换时只需保存和设置少量寄存器内容,开销很小。此外,由于同一进程内的多个线程共享进程的地址空间,因此这些线程之间的同步与通信非常容易实现

6:支持多处理机系统。对于传统单线程进程,不管有多少处理机,进程只能运行一个处理机上,对于多线程进程,可以将进程中的多个线程分配到多个处理机上执行

线程的属性

多线程操作系统中的进程已不再是一个基本的执行实体,但它仍具有与执行相关的状态,所谓进程处于“执行”状态,实际上是指该进程中的某线程正在执行。线程的主要属性如下:
1:线程是一个轻型实体它不拥有系统资源,但每个线程都应有一个唯一的标识符和一个线程控制块,线程控制块记录了线程执行的寄存器和栈等现场状态
2:不同的线程可以执行相同的程序,即同一个服务程序被不同的用户调用时,操作系统把它们创建不同的线程
3:同一进程的各个线程共享该进程所拥有的的资源
4:线程是处理机独立调度单位,多个线程是可以并发执行的。在单CPU的计算机系统中,各线程可交替地占用CPU,在多CPU的计算机系统中,各线程可以占用不同的的CPU,若各个CPU同时为一个进程内的各线程服务,则可缩短进程的处理时间
5:一个线程被创建后,便开始了它的生命周期,直至终止。线程在生命周期内会经历阻塞态、就绪态和运行态等各种状态变化

为什么线程的提出有利于提高系统并发性?可以这样理解:由于有了线程,线程切换时,有可能会发生进程切换,也有可能不发生进程切换,平均而言每次切换所需的开销就变小了,因此能够让更多的线程参与并发,而不会影响到响应时间等问题。

你可能感兴趣的:(开发语言,操作系统)