我经常困扰于如何给一个不了解计算机或没有深入理解计算机工作原理的人解释什么是进程,什么是程序,什么是线程。虽然菜谱的例子非常经典,但是对于一个做饭的外行,我还是不太敢给别人用菜谱去给别人去举例。而我自己还是对于足球比赛比较了解,毕竟自己也组织过小型足球赛。组织足球比赛需要如下步骤
比赛结束
而一个程序要能够运行的步骤
编写程序
通过上面可以看出两者还是有一定的相似之处的,下面就进行详细的介绍。
而组织足球比赛,第一个就是写足球比赛策划书,这就类似于编写程序。写草稿的时候,我比较习惯用字母来代替事件或食物,比如R代表租借场地(申请内存)、Score代表记分统计员、A队B队表示参赛队伍(常量数组)等。比赛如何进行就相当于写程序的逻辑思路等。很快我的草稿就会完成。
而这些对于其它的相关人员,他们看不懂我写的策划书,我就要将代号修改成任何人都能看懂的名称。这就类似于程序编译链接(或解释)的过程,从而就生成一个可用可执行文件。而这个足球比赛策划书就是可以实施的程序。(对,程序是死的,只是放置在磁盘中的01数据,如果没有去运行他,他就一直放在那里,而进程是活的,是运行的,就相当于正在进行的足球比赛,进程就应该理解为正在运行或等待运行的程序)
a process is an instance of a computer program that is being executed
写好策划书,并不是比赛就可以直接开始,如果要启动该策划书,首先就要提上日程。类似于要开始去运行那个编译好的可执行程序。那就进入了比赛的准备阶段,准备租借场地(分配内存空间)、聘请裁判及记分统计员等相关工作人员(申请PCB)、确定比赛的球队及人员情况(输入输出等资源)等。等一切都准备就绪以后,就等待比赛开始的时间(进程调度等待cpu)等。
到了比赛时间,裁判一声哨响(进程获取到运行时间),比赛开始,我们双方22个球员开始不同的行动(多个线程运行),每个球员有自己的球服,位置,教练安排的战术等(线程栈里存的程序计数器、寄存器值等),他们共同在球场上踢球、有裁判等工作人员(共享的资源),其中有个资源比较特殊,那就是足球,每个时刻只能有一个球员掌控着它(互斥共享资源)。从这里可以看出,对于进程而言里面真正运行就是一个个线程。而进程更像一个给线程提供资源的资源供应者。
裁判终止比赛,比赛结束,得到比赛结果,就类似于进程结束,获得输出。当然比赛和进程运行还是有很大差别的,比如每个线程运行都是之前程序中写好的,而我们真正的足球比赛时,不能在策划书中就写好球员要怎么去踢球。
不知道这个比喻是否能更容易让人们去理解,而且本人水平有限,理解有不对的地方望各位海涵。
本文发布于:2024-02-01 06:21:29,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170673969134515.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |