速度差

       同样话不读多少,先上一个图看一下!

复杂技术架构系统特征 和 拓扑 技术复杂性_多进程

 

 

从上图中我们能感受到CPU和数据存储设备的速度差是多么的悬殊,人类在各个方面对于性能的追求总是孜孜不倦的,因为更快代表着更强或者能更早的获取到机会争取到利益。

计算机核心的功能在于计算,最早是人肉输入信息让计算机来计算,不过人和计算机在速度上比,人绝对是智障。当然,人脑也是极易输入错误的,所以,就将相应的输入程序及数据先写好放到硬盘,到时候计算器直接从硬盘上读取就行了,不过硬盘太慢了CPU难以忍受,所以,为了更快的读取速度,就加上了内存,可是内存相对CPU还是慢的不行,后来又加上了L1/L2/L3三级缓存,这样总算是基本赶上CPU的速度了。解决了速度匹配的问题,但是引入了其他的问题,比如:内存及缓存空间比较小,所需数据比较多,命中不到还是需要从磁盘一级一级的把数据倒腾过来,计算的数据也同样需要一层层的在写回磁盘。磁盘——内存——L3——L2——L1——CPU之间还是存在速度差的,存在速度差就又快又慢就存在等待,存在等待就存在干的快的有空闲。为了不让CPU空闲,于是产生了多进程,不过多进程的上下文切换太重了,于是又有了线程,线程间是共享进程的公共内存空间的,多个线程对同一块内存地址都可以有写操作,于是就产生了多线程并非编程导致数据不一致性的问题。为了解决这个问题有引入了锁机制以及内存操作的管理模型,这样下来原本简单的编程就变得复杂了起来。

我认为单机编程的复杂性就在这里了,引起这个复杂性的根源就是——数据存储设备运输数据到计算设备的速度差导致的。如果仔细来好好分析,几乎所有的技术,都在是想方设法绞尽脑汁的在通过各种方法来解决这个问题的。比如:数据库的索引,内存数据库,零拷贝,线程池,单例模式,异步编程,事件驱动模型,日志追加写,数据先放入内存在一级一级的放入对应的缓存等等。