虽然以前知道计算机里有CPU,内存,硬盘,显卡这么些东西,我还真不知道这些东西是怎么协作起来完成一段程序的,能写出程序却不懂程序,也不会向别人解释他们的关系,所以特意总结了一下,写的比较浅显,和我一样是菜鸟或小白的人可以看一看,解释的角度是从完全不懂的人的角度来考虑的。
首先程序是什么?程序和我们的电脑硬件CPU,内存,硬盘,到底有什么关系?
程序是指一套做事的流程,比如村里召开妇女大会的流程,可能就是先找好开会场地,然后通知领导和妇女,安排领导讲话等等。计算机指的程序也差不多,也是一套做事的流程,只不过计算机只能读懂他们所理解字符,我们开会的流程是通过人与人之间的协作完成,计算机的程序跑起来是通过硬件的协作完成。
在这里我们先做一个比喻,假设CPU,内存,硬盘等这些东西都是来自一个星球的外星人,既然是外星人,当然不懂我们地球人的语言啊,而且这些外星人有一个特点,他们只有一只手,且手上只有一根手指,每次算数的时候,因为要靠手指来计数,我们的10进制数字,他们一根手指根本不够用啊,这就和我们小时候数到11就得借用脚趾头一样,所以他们来计算我们地球人的数字时就需要借用很多小伙伴手来表示一个大于2的数字,这个就是他们的2进制。
现在知道了CPU,内存,硬盘的特殊算数方式,我们来进一步来看看他们之间的协作,他们是怎么完成我们人类的要求的。
首先每个人都有自己擅长的东西,计算机星球的这几个小伙伴也是,各有各的属性,CPU这个人最聪明,算数最快,缺点就是记不住太多东西,算完的东西不存起来就忘了,所以需要别人协助记流程数据。再看看硬盘,硬盘体格最大,记性好(虽然慢点),所以他被分配了一个任务,那就是记住我们地球人分配的各种无聊的流程数据(什么开会的流程啊,请那些人啊,这些人的电话号码多少啊等等),但是呢由于硬盘反应慢,cpu并不想直接和硬盘打交道,然后再看看内存, 内存比硬盘小很多,反应比硬盘快好多倍,但是就是记的东西有点少,而且没电的时候就罢工,把东西忘的一干二净 ,但因为反应快,且记的东西比自己多,cpu决定和内存直接打交道要流程数据。
这样我们就可以一次性把很多任务的流程写好堆给硬盘兄,什么开会的流程啊,查看天气预报的流程啊,给女朋友打电话的流程啊统统提前写好塞给硬盘,然后当我们需要计算机完成一个任务时,内存从硬盘那把这个任务的流程全都要过来,此时的程序是一堆的指令集(做事的流程),cpu从内存逐条要指令,一条指令计算调度一次,每完成一个步骤后都要内存帮忙翻到相应的地方,看这个流程下一步要求是什么,从头到尾一路算完,这样他们就完成了计算机程序。
刚刚我们提到了程序员这个角色,那为什么他们写的东西,计算机星球的这些外星人能听懂呢?明明刚刚说的计算机星球的这些人只懂0和1嘛,程序员写的好歹也是英文嘛,难道,计算机星球的外星人懂英文?他们当然不懂,程序员理论上写好计算机能直接读懂的01代码是可以的,但是程序员如果每次都要把程序直接转写成01代码势必会大大降低写程序的效率,而且每个程序员要从底层这么深入了解计算机语言也会非常费时间,所以早期的程序员大神干脆写了个翻译程序,这个程序也叫编译器,这个编译器可以专门把一门特定的语言转成机器能读懂的计算机语言,这样有了这个么翻译,后来的程序员写程序就会轻松很多,可以直接写上地球程序员方便阅读的代码,所以我们应该感谢发明编译器的人,他们让人类世界和计算机世界交流变得更便捷了。
以上只是大概介绍了下计算机cpu,内存,硬盘和程序的关系,用了些可能不算好的比喻,如有纰漏和不正确的地方,望指正。