进程和线程的区别

进程和线程的区别

  • 一、进程
  • 二、线程
  • 三、进程和线程的区别



一、进程

  • 1945年第一台计算机出现的时候,那个时候还不存在操作系统,计算机的运行是需要人工的方式通过纸带将程序和数据输入到内存中,然后计算机才可以执行程序;
  • 后面为了解决人机矛盾及CPU和I/O设备之间速度不匹配的矛盾,出现了脱机输入/输出方式,通过外围机来控制程序和数据的输入和运算结果的输出;
  • 为了实现对作业的连续处理,发展到单道批处理系统,他可以将一批作业以脱机方式输入到外存中,并且配上监督程序(Monitor),来控制作业的连续执行;
  • 然后就是我们的重点了,为了进一步提高资源利用率和系统吞吐量,多道批处理系统同一时刻将多个作业调入到内存当中,使他们共享CPU和系统中的各种资源,在一定程度上也只有多道批处理系统才算的上的真正的操作系统

从下图我们可以看到,
多道批处理可以在同一时段里同时运行多个程序,
在某个程序发生I/O请求或者其他等待事件事,将处理机释放,让其他的程序可以获得处理机并执行,
这里引出了并发的概念。

进程和线程的区别_第1张图片

并发:指两个或多个事件在同一时间间隔内发生。

程序的并发执行有以下的特征:

  1. 间断性:程序执行过程可能会发生中断,是并发程序具有“执行–暂停–执行”这种间断性规律;
  2. 失去封闭性:程序执行过程中,为其分配的资源的状态不会仅仅被该程序使用,别的并发程序也可访问;
  3. 不可再现性:因为失去了封闭性,也将导致并发的执行结果失去了可再现性。

对于程序的并发执行,因为失去了封闭性,并具有间断性,以及其运行结果的不可再现性,这些也导致了通常的程序是不能参与并发执行的,否则程序不能按照我们的设计运行,无法得到我们的预期结果,也就失去了并发执行的意义。
为了能使程序并发的执行,并且可以对并发执行的程序加以描述和控制,OS的设计人员引入了进程的概念。

讲到这里,我们对进程被引入的目的这个问题作了解答,
进程被引入的目的就是为了增加操作系统的并发性,也就是可以是为了保证程序可以并发的执行。

下面我们就一起来控讨一下进程是什么?

传统的操作系统中对进程的定义,比较典型的定义有:

  1. 进程是程序的一次执行。
  2. 进程是一个程序及其数据在处理机上顺序执行所发生的活动。
  3. 进程是具有独立功能的程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位。

可能大家更熟悉的定义是:
进程是进程实体(程序段、相关的数据段、进程控制块pcb)的运行过程,是系统进行资源分配和调度的一个独立单位。


不过这里给出的定义和大家熟悉的是一样的么?
一般博客里给出的进程的定义一般如下:进程是系统进行分配和管理资源的基本单位
这里和我们的给出的定义是不是有些区别,首先,进程不在是系统进行调度(运行)的独立单位了,大家想一想,这两个定义究竟哪一个才是对的呢?


细心的读者可能已经看到前面加粗的文字-----传统操作系统。

这里可能大家就有些疑惑了,操作系统怎么还区分传统和非传统呢?
操作系统按照其发展,将操作系统分为传统操作系统和现代操作系统,其主要的区别就是管理的硬件资源,传统的操作系统一般是单核CPU ,其他的配置也都较低,现代的操作系统处理器基本上都是多核 的,显卡和内存都有了极大的进步。

所以,上面的两个定义都是对的,我在上面给出的线程的定义是在传统操作系统中的,是进程被引入时开发人员对进程的定义,而大家熟悉的定义,是在现代操作系统中的。现在使用的较多的定义都是现代操作系统中的定义,但是如果你能了解进程的演进,对你面试或者知识的理解还是非常有帮助的。


二、线程

现在,讲到线程了,大家同样思考几个问题,线程又是什么?线程被引入的原因是什么?

上面我们讲到在传统操作系统中,进程是可拥有资源的独立单位,同时又是一个可独立调度和分派的基本单位。
那在这种情况下,我们来看,程序并发执行需要付出的时空开销:

  1. 创建进程,此时需要为进程分配除处理机以外的所有资源,如内存、I/O设备、以及建立对应的PCB;
  2. 撤销进程,此时又需要将创建时分配的资源执行回收操作,然后撤销PCB;
  3. 进程切换,对进程上下文切换时,需要保留当前进程的CPU 环境,设置新被调度程序中进程的CPU 环境。

从上面我们可以看到,由于进程是一个资源的拥有者,
因此在创建、撤销和切换中,系统必须为之付出较大的时空开销,这也就限制了操作系统中所设置的进程的数目,
而进程的切换也不宜过于频繁,从而限制了并发程序的进一步提高。

讲到这里,线程被引入的原因是不是呼之欲出了,目的就是为了减少程序在并发执行时所付出的时空开销,使操作系统具有更好的并发性

引出了线程的概念后,传统的操作系统就演变成了现代操作系统。
在现代操作系统中我们来看下线程的定义:作为调度和分派的基本单位。

因此,进程作为资源分配的单位,而将独立调度和分派的功能分给了线程,因此线程也被称为轻型进程。

这样操作系统就可以分开处理(资源和调度分派),对于拥有资源的基本单位(进程),不对之施以频繁的切换,对于只拥有少量必要资源的线程来实施调度和分派。

有了线程之后,一切就变得不同了,虽然一个线程也只能运行在一个处理机上,但是线程由于其体量小的特点,OS中线程的数量远远大于进程的数量,这样一个进程中的多个线程就可以并发的执行在多个处理机上了,这样才能充分地的利用技术革新带来的便利----多核处理机,又进一步的提高了操作系统的并发性。

​ 同时也正因为多处理机的迅速发展,OS的发展也得到了大大的促进。


三、进程和线程的区别

首先是两者的定义:进程是OS分配资源的基本单位线程作为OS调度和分派的基本单位

下面我们从调度性并发性系统开销拥有资源等方面对线程和进程做一个比较。

  1. 调度的基本单位
    这里也主要是定义上的区别,在传统的OS中,进程是作为独立调度和分派的基本单位,因而进程是可以独立运行的基本单位。但是因为每次调度时,都需要进程上下文的切换,开销较大。
    而在引入了线程的OS中(现代OS),已把线程作为调度和分派的基本单位,因而线程是能独立运行的基本单位。
    因为线程只拥有较少的资源,所以线程切换的代价远小于进程。
    在同一个进程中,线程的切换不会引起进程的切换,但是从一个进程中的线程切换到另一个进程中的线程,必然会引起进程的切换。

  2. 并发性
    在引入线程的OS中,不仅进程之间可以并发执行,
    而且在一个进程中的多个线程之间亦可并发执行,甚至允许一个进程中的所有线程都能并发的执行。
    同样,不同进程中的线程也能并发的执行,使OS具有了更好的并发性,从而能更加有效的提高系统的资源利用与和系统的吞吐量。

  3. 拥有资源
    进程可以拥有资源,并作为系统中拥有资源的一个基本单位。
    然而,线程本身是不拥有系统资源的,而是仅拥有一点必不可少、能保证独立运行的资源,包括线程控制块TCB、程序计数器、一组寄存器和堆栈。
    ​但是线程除了拥有自己的少量资源外,多个线程之间还可共享该进程(线程所属的进程)所拥有的资源。

  4. 独立性
    同一进程中的不同线程之间的独立性要比不同进程之间的独立性低得多。
    这是因为进程拥有自己的独立地址空间和其他资源,并且为了防止不同进程之间彼此干扰和破坏,除了一些共享的全局变量外,不允许其他进程访问,因此不同进程之间的独立性高;
    另一方面,同一进程中的不同线程往往是为了提高并发性以及进行相互之间的合作而创建的,他们之间共享进程中的地址空间和资源,因此独立性低。

  5. 系统开销
    ​OS为创建、撤销、调度进程耗费的资源明显的大于线程创建、撤销和调度所付出的开销。
    举个例子,线程的创建要比进程的创建快约30倍,线层的上下文切换要比进程的上下文切换快5倍。
    此外,由于一个进程中的多个线程具有相同的地址空间(共用进程的),线程之间的同步与通信也比进程的简单。

  6. 支持多处理机系统
    ​在多处理机系统中,对于传统的进程,即单线程进程,不管有多少个处理机,该进程只能运行在一个处理机上。
    但是对于多线程进程,就可以将一个进程中的多个线程分配到多个处理机上,使他们并发执行,这无疑会加快进程的完成。

你可能感兴趣的:(进程及高并发,计算机操作系统)