百度百科的解释:
是一组计算机能识别和执行的指令,运行于电子计算机上,满足人们某种需求的信息化工具。翻译成人话:
一串指令,电脑能够识别的指令。
程序是个【静态的】概念,比如我们在电脑上安装的WPS,就是一个程序。
那什么又是进程呢,我的理解就是【进行中的程序】,是个【动态的概念】,关键字是进行中。
就好比一台车,停在那里不动,是个程序,如果跑起来了,它就是个进程。
那什么是线程呢,这个先不说,在说线程之前,我们先来了解一下一个程序的运行过程。
我们将从CPU和程序本身两个角度说明
CPU是计算机的计算单元,是计算机中专门用来处理指令的部件,运行的速度非常之快,但是,这里我却想说,其实它就是个傻子!
为什么这么说呢?
因为,它只知道干活,至于干的什么活,都不是它能决定的,它的任务就只有干活,反正就一句话,干就完了。
至于干什么呢,当然由他的“上司”控制器决定。
这个控制器呀,就非常的厉害了,CPU每次要干什么事情都由它来决定,它从一个叫就绪队列的队列当中,挑出来一个任务,交给CPU,CPU接到任务之后,开始埋头苦干。
当然,CPU不能一直干对不对,总有停止的时候吧。
那他什么时候停止呢?
控制器让他干的活他干完了,或者别人让它停!
但是,能叫停它的就只有一个东西,那就是中断!
至于又什么是中断,我们这里不做解释,我们只要知道,它是一个能让CPU停止工作的东西就行了!
中断有很多种,我们这里说一种,叫时钟中断
。
通俗的说,就是隔一段时间就叫停CPU的部件,每次的间隔时间都是固定的,所以有了时间片的概念。、
规则每个程序一次运行多长时间。
将上面的流程梳理总结一下,CPU只负责埋头拼命地干活,时钟认为CPU做这个任务的时间运行时间到了,就发出中断叫停了它。
在中断让他停止之后,这个时候控制器会从就绪队列里面挑选一个任务,让它继续工作。
那为什么不让这个程序做完再继续干另一个呢?
可以想象一下我们日常使用电脑的场景,我们WPS是一个程序,QQ也是一个程序,我们有用完WPS关闭之后再用QQ的案例么?
没有吧,我们大多时候,都是同时使用好多个软件的。
那么CPU是怎么处理的呢?
就是轮流来,你运行一段时间,我运行一段时间,也就是一个时间片,因为CPU工作的速度非常非常的快,即便是一个程序运行的过程中去运行了别的程序,立马切换回来再继续运行的话,我们用户是感觉不到的。
这种方式叫做并发。
说到这里,我们额外的提一下两个概念–并发和并行。
两个程序你运行一下,我运行一下,就状态而言,两个都在运行中,但微观上,却不是一起执行的,一个运行,一个在等待,是间隔执行的,但是交替的特别快,我们用户就感觉它们是一起运行一样。
真正的一起运行,状态上它们都在运行中,并不是交替,就是一个在运行的时候,另一个也在运行。
因此,如果在电脑只有一个CPU的时候,WPS和QQ是并发执行的,但是当有大于或多于两个的时候,这两个程序就有可能并发,也有可能并行了。
结合上面的图,当用户点击一个应用程序的exe文件,或者快捷方式的时候,电脑就知道我们要运行这个程序了,于是将这个程序的代码调入内存中。
同时生成一个进程控制块,挂在就绪队列的队尾,等待控制器的调度。
这一章节,我们就说下程序和进程的概念,以及程序的一个执行过程,下一章我们再进一步展开说说线程。
技术有限,不足之处,还望大家多多指正,可以在评论区留言,如果有说的不清楚的地方,大佬们也可以在评论区补充。