“计算机科学”学习回顾-2019.3.4
前言
有幸通过一个前端基础文档进入了一个博客,里面一篇写着关于面试有感,让我反省了一下最近学习遇到的“天花板”。目前来说,自己可以独立开发一个完整的项目,但是对于优化等其他方面却感到无从下手。读了这篇文章后,回顾自己的专业课程,貌似“OS”、“数据结构与算法”、“网络”都逃掉了(捂脸)。
现在看来,觉得这些基础还是比较重要的。举个例子来说,优化方面的。
计算机在执行一个文件并显示时,在机器中有一系列的复制过程:数据从->存储区复制到主存->主存复制到L1->主存复制到显示器(IO设备)。这些复制会产生一定的开销,遇到大文件会造成卡顿。
引用《深入理解计算机系统》中的一句话,“根据机械原理,空间大的存储设备要比空间小的存储设备运行要慢”,试比较从主存复制到CPU和从磁盘复制到CPU哪个更快?
由此引出“高速缓存“的概念,他是存在于CPU当中的,存储空间要比主存小,所以理所应当的处理速度快。
而一层一层的存储设备产生了”存储层次结构“,
寄存器 |
---|
L1高速缓存 |
L2高速缓存 |
L3高速缓存 |
主存 |
本地硬盘 |
网络硬盘 |
速度显而易见,最上层的最快。
对于”存储层次结构“这个概念来说,每个上级对于下级来说都是一个高速缓存,所以可以得出一个优化的方案:对于我们部署到服务器的网页项目,可以在服务端和用户端之前加入缓存服务器,以加快处理速度。
之前的时候,我还不太明白,比较大的一些项目为什么会有一个以上的服务器,知道这些计算机基础后,感觉这些思路很清晰。所以目前我在读一本”深入理解计算机系统“的一本计算机科学基础书,里面对于我的启发还是比较大的。
书中的一些干货
- 文件在系统中一般是以ASCLL码来进行存储的。
- C代码变成可执行文件其实有四个阶段(我以为就一个):
- 预处理阶段,将#inlcude的一些文件数据引入等其他操作,并产生中间文件
- 编译阶段,将上一步产生的中间文件翻译成指令(汇编)代码,并产生中间文件
- 汇编阶段,将上一步产生的中间文件翻译成机器码(01),并产生中间文件
- 链接阶段,将上一步产生的中间文件中一些C一些自带的函数库(这些代码其实已经到达了汇编阶段)引入,产生可执行文件
- 字时由字节组成的,而字的大小在不同位的系统中不一样,所以字有可能是两个(16位)、四个(32位)、八个(64位)字节组成,由计算机的CPU每次处理的位数(字长)决定。