进程的理解
程序的理解
程序与进程的关系
父进程与子进程关系
并行与并发的理解
进程的定义
进程是程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。
进程的性质
动态性
独异性
并发性
独立性
异步性
交往性
结构性
进程的存储
进程是在内存上的,它由数据、进程控制块、程序组成。进程之间是会互相争抢资源的。同时系统根据PCB感知进程的存在,它是进程存在的唯一物理标志。
程序的理解
计算机编码的指令的次序。程序是永久性的,存在在磁盘上的一个可执行的映象上,是一组静态的有次序的指令编码。程序进入内存后就能够运行。
程序与进程的区别
1、程序是静态的,然而进程是动态的。并且程序要进入到内存中才能执行,这种执行的过程就是进程。
2、进程是暂时性的,它有自己的生命周期,程序是永久性的,可以长期保存,因为它是计算机指令编码。
3、进程需要依靠程序来存在,没有程序运行,进程也是没有它自己的存在价值的。
4、进程是一个过程,是一个动态的运行过程。而程序仅仅是一断指令编码。
程序与进程的关系
一个程序可以对应多个进程,同时一个进程也可以同这个程序进行执行也能同另一个程序执行。
(看到网上一个比较形象的描述就是:打个比方,一个程序就像一个菜谱,用于指导人来做这个菜。进程就是按菜谱做菜的具体过程。一般说来,一个程序可以只有一个进程,也可有多个进程;一个进程可以同这个程序相对应,也可以同另一个程序相对应,如这个菜谱中的加盐是这个菜谱的进程,加盐这个进程也可用于其它菜谱。)
父进程与子进程关系
1、通过linuxC上的几个列子可以看出,父进程生出子进程之后,系统会将子进程的进程id初始化,用fork()函数后,便会返回两个值,返回两个值的原因就是因为创建子进程后,之后的代码是父进程执行一遍,子进程再执行一遍,所以相当于父进程调用了一次fork,子进程创建后也调用了一次,所以父进程返回的是子进程的pid,子进程返回的是下一次初始化后的pid,所以子进程返回的是0.
2、进程是在内存中的,所以会抢夺资源,我测试后一般都是父进程先产生,子进程再产生。这种关系的先后要看内核中的算法是如何用的,有时候是交替的。
并行与并发的理解
并行顾名思义就是一种平行的关系,并发暂时可以理解一起发生发生的关系。
看网上举了几个形象的例子:
1、并发就是:一个人(CPU)喂两个孩子吃饭(进程),每个人一口,按照顺序来,一人一口,虽然看上去,两个孩子是在吃饭,但是它们是有顺序的。
2、并行就是:两个人(CPU)分别一个人喂一个孩子吃饭(一一对应),同时喂,所以是同时发生的,但是是在不同的处理对象上。
引用知乎
你吃饭吃到一半,电话来了,你一直到吃完了以后才去接,这就说明你不支持并发也不支持并行。你吃饭吃到一半,电话来了,你停了下来接了电话,接完后继续吃饭,这说明你支持并发。你吃饭吃到一半,电话来了,你一边打电话一边吃饭,这说明你支持并行。并发的关键是你有处理多个任务的能力,不一定要同时。并行的关键是你有同时处理多个任务的能力。所以我认为它们最关键的点就是:是否是『同时』。
作者:龚昱阳 Dozer
链接:https://www.zhihu.com/question/33515481/answer/58849148
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
这个回答的评论,也更加解释了两者的区别:
土豆炖上小牛肉土豆炖上小牛肉1 年前
吃饭的时候先接电话跟后接电话的比较更像是中断优先级高低的不同,并发应该是一手筷子,一手电话,说一句话,咽一口饭。
并行才是咽一口饭同时说一句话,而这光靠一张嘴是办不到的,至少两张嘴。
26回复踩举报
龚昱阳 Dozer
龚昱阳 Dozer (作者) 回复土豆炖上小牛肉1 年前
你的比喻也很不错~但我觉得我们俩本质上没矛盾。关于并发,你关注的是一张嘴,我关注的是一个人。