一、程序、进程、线程的概念
1.程序
程序指的是一些保存在磁盘上的指令的有序集合,通常用某种程序设计语言编写,运行于某种目标计算机体系结构上。程序是静态的,就好比一个电脑上的普通文件一般,没有任何执行的概念。
2.进程
进程是计算机中的软件程序关于某数据集合上的一次运行活动,用通俗的话来讲,进程就是一个程序的一次执行过程。进程是一个独立的可调度的任务,是一个动态的概念,它是程序执行的过程,包括创建、调度和消亡;当系统在执行某个程序时,系统进行资源分配和调度的基本单位就是我们所说的进程,因此可以理解进程是操作系统结构的基础,是程序执行和资源管理的最小单位。
3.线程
线程就是指的是进程中的实际运行单位,它是操作系统中进行运算调度的最小单位。换句话说,线程是进程中的一个最小运行单位。每个运行的程序都是一个进程,在一个进程中还可以有多个执行单元同时运行,这些执行单元可以看做程序执行的一条条线索,被称为线程。一个进程中至少有一个线程,不然没有存在的意义。线程就是CPU调度和执行的单位。例如:你在看视频(进程)的同时可以听到声音(线程),看到图像(线程)和字幕(线程)等。线程自己不拥有操作系统资源,但是该线程可与同属进程的其他线程共享该进程所拥有的全部资源。
二、程序、进程、线程三者的联系与区别
三者的联系可用上图清晰表示:
对程序而言:1).程序并不能单独执行,是静止的,只有将程序加载到内存中,系统为其分配资源后才能够执行;
2).一个程序的执行可以包含多个进程。
对进程而言:1).程序对一个数据集的动态执行过程,一个进程包含一个或者更多的线程,一个线程同时只能被一个进程所拥有,进程是分配资源的基本单位;
2).进程拥有独立的内存单元,而多个线程共享内存,从而提高了应用程序的运行效率。
对线程而言:1).线程是进程内的基本调度单位,线程的划分尺度小于进程,并发性更高,线程本身不拥有系统资源,但是该线程可与同属进其他线程共享该进程所拥有的全部资源。
2).每一个独立的线程,都有一个程序运行的入口、顺序执行序列和程序的出口。
1.程序与进程的比较
1.包含的内容不一样进程是由正文段、用户数据段及进程控制块共同组成的执行环境。正文段存放被执行的机器指令,用户数据段存放进程在执行时直接进行操作的用户数据。进程控制块存放程序的运行环境,操作系统通过这些数据描述和管理进程。
程序所含的指令和数据是指正文段和用户数据段;进程不仅包括程序的指令和数据(即:正文段和用户数据段),而且还包含程序计数器值、CPU的所有寄存器值以及存储临时数据的进程堆栈,统称为系统数据段。
2.程序只是一组指令的有序集合,它本身没有任何运行的含义,它只是一个静态的实体。而进程则不同,它是程序在某个数据集上的执行。进程是一个动态的实体,它有自己的生命周期。它因创建而产生,因调度而运行,因等待资源或事件而被处于等待状态,因完成任务而被撤消,反映了一个程序在一定的数据集上运行的全部动态过程。程序是永久的,进程是暂时存在的。程序的永久性是相对于进程而言的,只要不去删除它,它可以永久的存储在介质当中。
3.进程和程序并不是一一对应的,一个程序执行在不同的数据集上就成为不同的进程,可以用进程控制块来唯一地标识每个进程。而这一点正是程序无法做到的,由于程序没有和数据产生直接的联系,既使是执行不同的数据的程序,他们的指令的集合依然是一样的,所以无法唯一地标识出这些运行于不同数据集上的程序。一般来说,一个进程肯定有一个与之对应的程序,而且只有一个。而一个程序有可能没有与之对应的进程(因为它没有执行),也有可能有多个进程与之对应(运行在几个不同的数据集上)。
4.进程还具有并发性和交往性,这也与程序的封闭性不同。进程和线程都是由操作系统使程序得以运行的基本单元,系统利用该基本单元实现系统对应用的并发性。
一个形象的“栗”子:
关于进程和程序的区别,《现代操作系统》中用了一个比喻形象说明:一位有一手好厨艺的计算机科学家正在为他的女儿烘制生日蛋糕。他有做生日蛋糕的食谱,厨房里有所需要的原料,在这个比喻中,做蛋糕的食谱就是程序(即用适当形式描述的算法),计算机科学家就是处理机(CPU),而做蛋糕的各种原料就是输入数据。进程就是厨师阅读食谱,取来各种原料以及烘制蛋糕等一系列动作的总和。
2.进程与线程的比较
进程和线程都是由操作系统使程序得以运行的基本单元,系统利用该基本单元实现系统对应用的并发性。进程和线程的区别简而言之就是:一个程序至少有一个进程,一个进程至少有一个线程 。线程的划分尺度小于进程,使得多线程程序的并发性高。另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。
线程在执行过程中与进程还是有区别的。每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。从逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配。这就是进程和线程的重要区别。 进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单。线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源。 一个线程可以创建和撤销另一个线程;同一个进程中的多个线程之间可以并发执行。
三、关于多进程、多线程
1.多进程
每个进程互相独立,不影响主程序的稳定性,某个子进程崩溃对其他进程没有影响,通过增加CPU可以扩充软件的性能,可以减少线程加锁/解锁的影响,极大提高性能。缺点是多进程逻辑控制复杂,需要和主程序交互,需要跨进程边界,进程之间上下文切换比线程之间上下文切换代价大。文章来源:https://www.toymoban.com/news/detail-778660.html
2.多线程
无需跨进程,程序逻辑和控制方式简单,所有线程共享该进程的内存和变量等。缺点是每个线程与主程序共用地址空间,线程之间的同步和加锁控制比较麻烦,一个线程的崩溃会影响到整个进程或者程序的稳定性。文章来源地址https://www.toymoban.com/news/detail-778660.html
到了这里,关于程序、进程、线程的概念、区别与联系的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!