新手程序员都有一种痛叫: “你能帮我推荐一款电脑吗? ”
“程序员虽然写代码,但是不会修电脑;就像范冰冰虽然演电视,但是不会修电视一样”。
程序员,真的被误会了。
329.jpg不过呢?
每当收到一些刚开始学习编程,正在学习编程的,或者已经工作的新手程序员读者们让我帮忙选电脑的请求时,我还是认真地回答。
可是每当我答到内存、CPU、SSD的时候,很多童鞋又不懂。其实个人觉得,在信息时代,人人都应该掌握一些计算机组成和体系结构的知识,特别是相关专业的童鞋。
所以,我决定以后咱们有空的时候也讲讲计算机组成。
今天,我们就先聊一聊硬盘吧。
1
磁盘原理及笔记本防坏指南
千万别没事开着机就端着你的笔记本电脑到处走动,很容易坏的!
笔记本电脑和台式电脑相比有一个很大的缺点,就是硬盘容易坏(HDD-机械硬盘),因为笔记本电脑需要经常移动,容易把硬盘给震着,但这好像也是笔记本的优点吧。
为什么笔记本的硬盘容易坏?
那我们就得先了解机械硬盘的构造。在介绍硬盘之前先来介绍一下留声机。相信大家都在电视上见过下图中的这个玩意,它叫留声机,是伟大的发明家爱迪生先生于1877年发明的。
image.png它的原理其实很简单,盘片上有很多凹槽,当指针和凹槽接触的时候,针尖随凹槽波动而轻微地振动,从而转化为声音,大家就可以听到美妙的音乐了。
其实计算机磁盘也是这个道理,如下图是一个拆开的磁盘,可以看到,磁盘上也有一个读写头。
image.png和留声机不同的是,读写头和光盘面是不接触的,他们之间通过磁性来传递信息。也就是说,磁盘是用磁介质来存储信息的。
如果你经常听见你的笔记本电脑内部有什么东西在细微震动,那多半就是你的磁盘在飞速转动。
此外,磁盘并不是像上图那样只有一面,如果夸张地把磁盘内部结构放大,它应该是下面这个样子的:
image.png这样一个看起来薄薄的磁盘其实一共有n张光盘共2n个面,每个面都可以记录信息。如下图中的左半部分所示。
每个盘面都有一组被称为磁道的同心圆,就如下面的磁道0、磁道1等等;每一个磁道又被划分为一组扇区。(这里很多同学可能会理解错误,扇区指的不是那个扇形,而是那一小段圆弧)。
扇区与扇区之间有一些间隙,把扇区隔开。
image.png每个扇区都可以存储数量相等的数据位,通常是512字节。前面加粗的字不知道大家有没有发现不对劲的地方?
对于圆弧形的扇区来说,越靠近圆心的圆弧就越短。既然每个扇区的磁道长短不一,为什么还存储着同样大小的信息呢(通常是512字节)?
没办法,就是这么蛋疼。在讲这个蛋疼的事情之前,我们还需要再了解一下柱面。柱面指的是所有盘面到主轴距离相等的同心圆的集合。可以参考上图右面的那个示意图,比如图中有4个光盘,8个盘面,那么一个柱面就由8个同心圆磁道构成。
好了,讲了柱面我们继续讲刚刚那个蛋疼的事情。
从上图左边的示意图可以看出,无论是靠近圆心的磁道还是最外圈的磁道,都被分割成了数量相等的扇区,并且每个扇区存储的数据量是一样的。
这样就会造成,靠内的扇区之间间隔很小,而越往外扇区之间的间隔就越大,如果非要用一句人话来描述就是:越往外,磁道记录信息的密度就越低。
扇区数目是由最靠内的磁道能记录的扇区数来决定的,这就是最坑的地方,最里面的磁道能划分为多少个扇区,那么最外层的磁道就必须存多少个扇区。十分浪费,当然,人类肯定不能一直这样设计。
后来有一种新的技术出现了,就是多区记录,什么意思呢?
用大白话说就是,假设一个磁盘有200个同心圆(柱面),之前200个柱面都按最里面的那个柱面来划分扇区。
现在的多区技术就是,把200个柱面划分为x个组,我们这里就假设成4个组,每个组50个柱面。
第一组的150个柱面以第1个柱面为基准划分扇区;第二组51100柱面以第51个柱面为基准划分扇区...以此类推。
这样就更高效地利用了磁道的存储位。
image.png当计算机开始运行,磁盘也开始飞速转动,然后读写磁头转动,就可以在相应的磁道中读写数据了。
讲完了原理,我们来讲讲你的笔记本电脑为什么容易坏。其实很多同学的笔记本坏了,多数时候都是磁盘坏了,那么磁盘为什么这么容易坏?
因为它转得实在是太快了。。。给个量化的指标,最外层的磁道和读写头之间的相对速度(学过物理的都知道线速度和角速度吧,这个自己转化yy一下)是80km/h。
做个不恰当的比喻,如果地球按这个角速度自转,那么地球自转一周也就需要8秒钟而已。在这种情况下,我想你绝对会被甩出银河系,地球也瞬间瓦解。
磁盘在高速运转的情况下,你拿着它到处走动,读写头很容易和盘面碰到,因为它们仅仅相距0.1微米。一点点小撞击,就能毁了你的磁盘。
所以,记住了。
电脑开着机的时候少拿着走动,关了机以后再放进书包带走。当然,如果你的电脑硬盘是固态的,那就请你随意走动,电脑开着机拿手上跳个广场舞也没事。
关于固态硬盘,后面我们慢慢道来。
2
算法上的优化
为什么说,程序员在知道了计算机底层原理以后能写出更优秀的代码?今天我们就用一个例子来说明。
如果你了解一些数据库的优化算法,你应该听说类似的优化策略:随机读转化为顺序读,随机写转化为顺序写。
为什么要转化呢?
因为随机读写真的很慢。
磁盘在读写数据的时候,时间主要消耗在三个地方。分别是:寻道时间,旋转时间和传送时间。
大家只要看了上面的内容,大致应该知道磁盘读取数据的流程。首先是寻道,也就是传动臂的读写头要先移动到对应的磁道上,这个过程所花费的时间叫寻道时间。
找到了磁道以后还不能马上读取数据,还需要找到相应的扇区才能开始读写,所以磁盘还要旋转,把对应的扇区转动到读写头下方,这个过程所花费的时间叫做旋转时间。
在找到目标扇区以后,剩下的时间就是传送时间了,也就是数据的写入和读取。
为什么随机读写慢,顺序读写快?
答案很明显,随机读写每次的时间花销都由上述三部分时间构成;然而顺序读写省去了前两部分时间。
看到这里,你已经可以装逼地给别人讲一下,为什么有一类算法要把随机读写转化成顺序读写。
3
一块SSD拯救了我的电脑,也就是固态硬盘。
image.png我那台老笔记本在用了4年后,有点扛不住了,所以我买了一块250GB的固态硬盘给换上,再自己加了一块4GB的内存,然后给它装上了一个Ubuntu系统(Linux),感觉它就像迎来了新生。我感觉它的性能提升了不只10倍。
这主要归功于那块固态硬盘,为什么固态硬盘这么牛逼?
因为固态硬盘采用的是闪存技术,其实你的U盘、手机存储都是闪存。
首先,固态硬盘不容易坏,因为固态硬盘中已经没有那个旋转的磁盘了,所以即使是开机状态你拿着它到处走也没事。
其次,固态硬盘的读写速度大约是机械硬盘的5~10倍,对于游戏玩家和开发者而言,这无疑是一个巨大的改善。
所以我的这台电脑换了固态硬盘之后,就被我放在家里装上各种数据库做存储系统了,时不时跑一些任务,性能也是杠杠的。
如果你看到了这里,相信你已经对硬盘已经有了初步的了解,在选购计算机的时候也可以看看相应的参数啦!今天的硬盘就讲到这里,之后有空我们再聊聊其他硬件,比如CPU、内存或者是主板。
这里推荐一下我的前端学习交流群:784783012,里面都是学习前端的,如果你想制作酷炫的网页,想学习编程。自己整理了一份2018最全面前端学习资料,从最基础的HTML+CSS+JS【炫酷特效,游戏,插件封装,设计模式】到移动端HTML5的项目实战的学习资料都有整理,送给每一位前端小伙伴,有想学习web前端的,或是转行,或是大学生,还有工作中想提升自己能力的,正在学习的小伙伴欢迎加入学习。
点击:加入