进程和程序的本质区别是

说白了,进程和程序的区别在于三点:执行状态、是否可以并行、谁在做工作。

流程是动态的,程序是静态的——这句话没错,但关键在于执行过程。
程序只是一堆指令。
比如我们去年跑的电商项目,代码文件放在那里,并没有自动运行;这个过程实际上正在进行中。
比如同时处理1 000个订单请求,每个请求就是一个进程。
用行话来说,这称为雪崩效应。
事实上,前面的一点延迟让其他人失望了。
第二件事是进程可以并行化。
去年我们搞了分布式部署。
同一个程序在三台服务器上运行,每台服务器上有一个进程。
3 000级左右的并发没有问题;但程序本身呢?它没有并行能力,只是一个死指令集。
另一个重要的细节是不同的进程可以共享同一个程序。
例如,我们在测试环境中使用进程A,在生产环境中使用进程B,但它们运行相同的代码。
相反,一个程序也可能产生多个进程。
例如,如果双击打开浏览器,系统会为其生成多个进程,一个负责渲染,一个负责后台。
坦白说,这很令人困惑。
很多人没有注意到这样一个事实同一程序中的多个进程会导致内存泄漏。
起初我认为多个进程共享代码是安全的,但后来我发现这是错误的。
他们仍然需要单独加载内存。

提醒一下,进程是操作系统调度的最小单位,所有的CPU和内存资源都是由它分配的。
很多人不重视这一点。

进程与程序之间有什么区别与联系?

老实说,我曾经这样理解过进程和程序之间的区别,但如果你真正分解它,就会发现其中有不少技巧。

我们先来说第一点。
进程是动态的,程序是静态的。
这听起来很相似。
例如,在计算机上打开的 Word 文档就是一个程序。
但如果你打开它,写入一些东西,保存它,那么经过一系列操作后,内存中的运行状态就会发生变化。
这是一个过程。
这个程序是一个蓝图。
人们必须决定何时以及如何使用它。
流程就是蓝图用完之后的样子,而且是在变化的。

第二点也很重要。
进程有生命周期,而程序没有。
想一想。
如果关闭 Word 进程,它就会消失。
当你再次打开它时,将是一个新的进程。
但是,Word程序本身将始终存在,并且只有在卸载后才会消失。
程序是死的,进程是活的。
这个区别我记得很清楚。

第三个有趣的事情是一个程序可以运行多个进程。
例如,如果你打开浏览器,点击三个选项卡,这三个选项卡就是三个进程,但是它们都使用了浏览器程序。
但恰恰相反,一个进程一旦执行完毕,程序就固定下来了,不能随意改变。
这就像一部电影。
有一个剧本(节目),但是你可以去电影院看N个场景(过程),而且每个场景都是独立的。

第四点是关于构图。
我更喜欢这样理解。
程序是静态指令堆。
除了程序指令之外,进程还必须有数据来记住进程的各种状态信息(存储事物、设置等)和进程控制块。
这就像做饭一样。
程序是菜谱,数据是您准备的食材,过程控制块是厨房里记录热量和时间的小笔记本。

但他说,“进程是程序员的概念,程序是用户的概念。
”我对此有点不确定。
当我当程序员的时候,每天都和进程打交道,但是当你使用电脑的时候,你更关注的是“打开这个软件”、“保存这个文件”这样的程序。
用户可能甚至不知道进程是什么,但他们知道如何使用该程序。
所以这个说法可能有些技术性。

你再说一句:“程序是给用户的,也可以称为软件。
”这实际上是正确的。
但我不认为“进程对于程序员来说是一个操作系统概念”这句话是完全正确的。
尽管用户不直接与进程交互,但该操作会导致进程在后台运行。
而且,操作系统设计者和管理员对流程更感兴趣。

说实话,进程和程序的关系就像汽车和司机的关系。
汽车(程序)死了,司机(进程)还活着。
一辆车可以容纳很多人(多个进程)但只能容纳一个司机(对应一个程序)。
对于操作系统来说,是流量规则决定了这些驱动程序如何运行。
不能闯红灯(违章驾驶等),必须遵循路标(遵循指示)。

我自己从来没有在这方面运行过操作系统内核代码,所以我可能不太记得一些细节。
我记得数据是有的,但是这些概念应该不会错,因为我当时是通过刻苦学习才学会的。

进程和程序的一个本质区别是

程序是静态代码,过程是动态完成的。
程序不占用资源,但进程占用系统资源。
程序加载文件并执行进程。

下载程序必须可靠。
官方网站下。
安装软件并阅读协议。
别假装。
选择自定义安装。
别搞砸了。
使用前先进行设置。
可靠稳定。
不要同时驾驶太多。
系统卡。
定期备份数据。
不要丢失它。