欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

志玲姐姐与程序运行杂谈

程序员文章站 2023-12-31 15:18:10
...

进入公司后,小牧开始进行了一些业务的研发工作。在校期间,他已经能够利用现有的框架进行编码了,比如他擅长的Spring来写java,用flask写个简单的python web等。但是他心里一直有一个疑惑:

“我读了7年的计算机专业,学了很多基础知识,可是现在在公司工作,每天就写了简单的业务逻辑代码,那我学那么多什么编译原理操作系统的,有啥用呢?”

今天午饭的时候,小牧趁着午饭间隙,和前辈聊起了这件事情。前辈笑了一下:年轻人,你要多学会思考。你说的那些,实际上也就是我们所说的计算机的基础知识。我可以给你聊聊我们写代码的和这些基础知识有啥联系。


我们聊计算机,首先可以聊一聊计算机的组成。
计算机根据冯诺伊曼体系划分呢,可以划分为运算、控制、存储、IO。我们可以把计算机系统画成图1的结构。
志玲姐姐与程序运行杂谈

                          图1 计算机组成结构

在这张图中,有运算器机器,纯粹做基本运算的组件。控制器,也就是志玲姐姐管理员。高速缓存桌子,内存书柜,外存仓库,IO接待窗口。图中的浅蓝色文件就是我们要运行的程序。勤劳的志玲姐姐会帮我们处理文件,也就是运行我们提交给系统的程序的。我们分别介绍一下各个部分。

  • 外存仓库
    由于程序太多,志玲姐姐建了一个仓库用来存放各种大量的数据。

  • IO接待处
    志玲姐姐不仅要处理从仓库取出来的任务,还需要到办事接待窗口去接待过来提交程序的程序员。办事窗口可以与外界进行交互。

  • 内存文件柜
    当志玲姐姐在外面拿了很多程序后,会将程序(文件)存放在房间里的内存文件柜放着,然后慢慢从书柜上面取出文件来处理。不同的文件柜,可能摆放的顺序不一样,柜上的编号不一样。如果文件柜里没有志玲姐姐需要的文件的话,那她就会去仓库取,或者等窗口有人送文件过来。

  • 高速缓存桌
    每次都要起身去文件柜拿文件太麻烦了,所以志玲姐姐有一个办公桌。她把文件先从柜子里取出一些来放到桌子上,要处理的时候就直接从桌子上取。但是显然桌子上放不下太多东西,只能放一部分。

所以,志玲姐姐就在有条不紊地从仓库呀、桌子呀、书柜上呀、窗口呀等去取文件来处理。

其实上面还有很多细节的部分,比如说志玲姐姐会取什么样的文件放到书柜,书柜里的文件如何 维护,桌子上的文件又应该放哪些等,都涉及到很多策略和知识。时间有限,这里我就不展开讲了。

其实呢,我们只有知道了志玲姐姐的习惯、喜好、风格,才能追到女神,不对,才能运行好程序。我们程序员设计程序,要让程序准确、高性能去运行,那么就要让志林姐姐更加高效准确地帮我们处理“文件”。这里我们举几个例子。

志玲姐姐在帮我们把文件投入运算器时,按照什么顺序去投呢?如果几个文件之间有依赖顺序,比如得先执行A,再执行B,那么就只能按照先A再B的顺序执行。但如果AB之间没有关联,那么就可以同时把A、B塞进机器(在机器可允许的容量范围之内)处理。这样显然是会加快处理效率的。因此对于程序设计来讲,知道了处理器的指令级并行机制,可以加快程序的运行效率。

对于高速缓存桌,加入志玲姐姐要处理的文件就在桌上,那么伸手就拿到了。如果没有的话,还得起身去书柜去找,书柜没有,就得出门去仓库或者窗口去要。这样时间显然就会浪费很多。因此我们希望志玲姐姐尽量不要起来,尽量多地优雅坐在桌前伸手处理桌上的,这样也会提供她的效率。这也就是我们的缓存命中率,我们需要尽量提高缓存命中率。如何提供?如果在设计程序时,尽量保证时间局部性和空间局部性,那么就能提高效率。那什么是局部性?举例来讲,志玲姐姐一般认为如果现在需要用到文件A1,那么和文件A1挨着放在一起的文件A2可能也会用到,那就一起取过来吧。如果下次刚好用到了A2,那么就可以直接用了。我们的程序要尽量提高局部性设计。

此外,比如你心疼志玲姐姐,那么就希望她能简单工作。如果她一会儿处理A,接着又去处理B,一会儿有C……就很折腾,因为她在切换处理的工作时需要做很多操作,比如假如A还没处理完,就得先把A的状态保持一下。尽量减少点调用,减少她处理文件的类别,那么也是一个提高效率的机制,也就是减少函数调用。

其实还有很多方法,不管怎么说,我们只有了解了整个处理过程,各个组件的属性,这样才能设计出“面向志玲姐姐”的程序。因此这也是我们学习计算机组成的各个部分的原因。

但是,对于大多数理工直男来讲,追志玲姐姐太困难,不知道志玲姐姐的喜好。并且如果每个人都去了解的话,那就太麻烦了。所以现在有很多编译器,会先帮我们的程序进行“面向志玲姐姐”优化,然后再把任务提交给志玲姐姐。但是编译器毕竟优化有限,并不是全能的,我们还是需要掌握优化设计的方法。因此,去看汇编,看看编译器帮我们如何优化程序的;去看处理器,了解他的分支预测方式,让他预测更准……

“所以,年轻人,你还有很长的路要走呀。”


小牧简历:
中国科学院软件研究所硕士毕业生,作为初入职场的菜鸟进入B公司,开始自己的程序人生之路。

相关标签: 计算机系统

上一篇:

下一篇: