0.摘要
本文主要介绍操作系统中进程和线程的概念,以及两者之间的关系和区别。
1.进程
什么是进程:
进程是对正在运行程序的一个抽象。进程是操作系统最核心的概念,因为操作系统的其他概念都是围绕着进程的概念展开的,是操作系统提供的最古老也是最重要的抽象概念之一。
进程并行性:
严格来说,同一时刻,一个CPU只能运行一个进程。我们常说的并行,是由于CPU可以快速由一个进程切换到另一个进程,使每个进程各运行几十或几百毫秒,给人们造成并行的错觉,这样的处理方式称为伪并行。
真正的硬件并行,需要两个或者多个CPU共享同一个物理内存,从而构成了多处理器系统。
2.线程
什么是线程
线程,有时被称为轻量进程(Lightweight Process,LWP),是程序执行流的最小单元。在多线程OS中,通常是在一个进程中包括多个线程,每个线程都是作为利用CPU的基本单位,是花费最小开销的实体。
在传统的操作系统中,每个进程有一个地址空间和一个控制线程。但现在的操作系统的进程基本都是多线程的了,这主要是因为许多应用中同时发生着多种活动,其中某些活动随着时间的推移会被阻塞。通过将这些应用程序分解成可以并行运行的多个顺序线程,程序设计模型会变得简单。具体可以概括为以下三点:
多线程的原因
- 一个进程中的多个线程,具备共享同一个地址空间和所有可用数据的能力,这是多进程模型(具有不同的地址空间)所无法表达的;
- 线程比进程更轻量级,所以在创建和撤销时,比进程更容易,速度更快。在很多系统中,创建一个线程较创建一个进程,要快10-100倍;
- 多线程有助于提升性能。如果多个线程都是CPU密集型的,多线程并不会对性能有所增强。但是,如果是大量计算和大量I/O处理,那么利用多线程将允许这些活动重叠进行,从而提升了执行速度。
3.进程和线程的区别
- 包含关系上:线程包含在进程中。一个进程可以多个线程,但至少有一个线程。
- 独立性方面:进程拥有独立的堆栈空间和数据段,之间互不干扰,相互独立;统一进程中的线程只拥有独立的堆栈空间,数据段是共享的,它们彼此之间使用相同的地址空间,共享大部分数据。
- 速度方面:进程每次启动一个新的进程必须分配给它独立的地址空间,建立众多的数据表来维护它的代码段、堆栈段和数据段,系统开销大;线程共享数据段,开销小,切换速度也比进程快,效率高。
- 安全性方面:进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响;线程只是一个进程中的不同执行路径,有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉。
- 并行性方面:一个处理器在同一时刻只能处理一个程序,进程的并发性是伪并行,除非有多个处理器;线程的划分尺度小于进程,同一个进程中的多个线程之间可以并发执行。