线程与进程都是操作系统中的两个重要的概念。相信很多人,包括笔者之前都存在着误区,进程是由很多的线程组成的。这篇文章将彻底地对两者的异同进行说明。
首先,我们要理清楚为什么会引入进程的概念。我们都知道,在多道批处理时代,系统的最小单元是程序,但是如果是单核CPU的话,没有一个很好的方法描述其并发的特点,同时程序在并发系统中走走停停会导致无序性,而且各个程序之间会相互影响,导致并发运行的结果不可再现。因此,程序的概念便不再试用了。后来,便引入了进程的概念。
那么,什么是进程呢?进程,通俗来讲就是运行的程序。其由代码段,数据段和PCB(进程控制块)三部分构成。每个进程由操作系统分配了指定的资源,因此可以保证可复现。此外,显然进程可以实现并发。
进程概念的提出确实为操作系统的性能提升做出了很大贡献。但是人们在进行进程间通信的时候,却看到了其突出的劣势 – 进程间的通信与切换代价太大!
由于每个进程都有自己指定的PCB控制块和数据段,在进程间的通信时,需要花很多的时间进行信息的交互。而CPU的时间片切换方式是很频繁的,因此制约了操作系统的性能。
那么如何解决这一问题呢?
我们首先来认识以下进程从功能上可以如何划分。
进程具有如下的两个部分:
- 拥有资源的独立单位: 其可以独立地分配地址空间,主存等。
- 可进行调度和分派的基本单位
而操作系统设计的目标,主要有两个方面的内容:
- 提升并发性
- 减少系统资源占用
因此引入到了线程这一概念。
在一个进程下,将其拥有的运行过程中必不可少的资源划分出来,然后每个线程完成一个特定的调度任务。
如下所示:
通过这种模式,一方面避免了进程间切换的大量资源消耗,同时由于线程是并发的,之前的进程可以支持多线程,提升了系统的并发性,达到了操作系统设计的两个目标。
以上所有内容,讲解了进程以及线程之间的差异。可以看出,进程并不是仅仅由线程构成的。其仍然具有PCB, 数据段,代码段。只不过将一部分资源独立出来构成了线程。
关于线程的概念详细情况将在之后的文章中进行分析。敬请期待。