盘点计算机领域中那些朴素而伟大的思想

发布者:静守己心 2024-4-27 08:30

引言

作为IT从业者,常常需要为现实世界的问题域建立计算机求解模型,于是便有很多机会探究现实问题的本质,也有很多机会可以从计算机体系架构、语言、软件系统等之中感受到一些朴素而伟大的思想,可以说是为更好地认识这个世界开了一扇窗。

不知道您是否和作者有同样的经历或感受呢?本文将带您一起盘点一下那些在IT行业熠熠生辉的思想。

抽象

抽象法又称模型法,通过提取现实世界相关事物的一个或多个方面的有用属性和关系来建立求解模型,是计算机科学解决实际问题的基本方法和工具,是计算机领域一种重要的基础性的心智活动。

抽象是一个“去伪存真”的过程,摈弃掉事物无关的细节,只保留那些需要关注的部分,并探究它们相互之间的关系。在Unix系统中,“一切都是文件”就是抽象的最好案例。软件开发活动中,SDK、API均为抽象思想的具体应用。

抽象法

分治

当一个问题因规模较大而导致直接求解比较困难时,可以考虑采取分而治之的方法解决。

分而治之的方法是把问题划分成若干个子问题来进行处理。子问题在规模上比原问题要小,结构上和原问题一致或在逻辑上可组合。如果子问题的规模仍然比较大,那么可以继续拆分,直到可以接受的程度为止。这样,就可以分别求解这些子问题,最后再将子问题的解组合起来,就可以得到原问题的解。

分治法不仅是排序算法、傅里叶变换等很多算法的基础,在软件结构上也有广泛的应用,体现为函数、类、模块、子系统、微服务、分层、分库、分表等形式。大名鼎鼎的分布式计算模型MapReduce采用的也是分治法的思想,先用Map拆分,后用Reduce合并。

分治法分为拆分、解决、合并三个步骤,类型上可分为水平拆分、树形拆分等。

分治法

分层

“计算机科学中的任何问题都可以通过加上一层间接层来解决”,这是IT界广为流传的一句名言。计算机架构、网络架构和软件架构等,无不体现着分层的思想。分层思想也是整个工业领域通用的准则。

分层法可以说是抽象法和分治法的综合运用,是人类友好的,可以为我们屏蔽不需关注的细节,可以实现关注度的分离,有利于大型问题域的协作解决。

OSI网络分层模型

时空置换

时空置换指时间资源和空间资源之间的相互置换,英文名称为Space–time trade off。空间换时间、空间换时间经常被用在计算机系统性能领域。

时空权衡原理在生物界就有应用,动物可以将模式化的反应保存为记忆,以便利用本能在紧急时做出快速反应。我们背诵乘法表,也是通过占用记忆空间,缩短计算时间的运用。

在计算机领域,我们也可以将耗时计算的结果存储起来,从而节省再次利用这些结果的时间,当然也可以根据需要反过来。常见的如缓存、查找表、数据压缩等,利用的就是这一原理。

时空可以转换的根本原理可能在于时间和空间是两个有相通路径的基础资源,甚至可以说,时间和空间本来就是同一种资源。

时空置换

缓存

缓存是空间换时间思想的具体应用,利用了数据访问在时间、空间和顺序上的局部性特点,来提升数据访问的性能。

当前的计算机系统,缓存可以说是无处不在,从浏览器请求,到反向代理服务器,从进程内缓存到分布式缓存,每个角落都有缓存的身影。被誉为“软件世界的爱迪生”的SUN首席科学家Bill Joy曾经调侃地说:“在计算机体系结构领域里,缓存是唯一能称得上伟大的思想的,其他的一切发明和技术不过是在不同场景下应用这一思想而已”。

多层级缓存思想可以有效解决不同层次存储需求之间的矛盾。

多层级缓存

冗余

可靠性设计包括避错和容错,冗余通过配备额外的资源来应对故障,本身带着时空权衡的基因,是容错的一种基本方法。

冗余是一种非常朴素的思想,不仅在生活、生产中有广泛应用,在计算机系统中也到处活跃着冗余的影子,比如RAID磁盘整列、数据库冗余字段、备份节点、备份存储、备份机房等,而分布式系统的基本原理就是分治和冗余。

冗余设计

并行

并行指的是同时执行多个操作,目的是通过扩大问题求解规模,来提高处理问题的速度,从而解决大型而复杂的问题。

并行一般有三种思路,即资源重复、资源共享和时间重叠。

并行也是一种古老的思想,在生活中有很多应用,方便我们根据任务耗时情况统筹规划,同时进行多个事务,提升效率。

并行

流水线

流水线是一种时间重叠并行处理的处理技术,通过把一个重复的过程拆解为若干个子过程,每个子过程由专门的功能部件来完成。在处理时,将多个过程在时间上错开,依次通过各部件工作段,这样每个子过程就可以与其他子过程并行进行。

借鉴了工业流水线制造的思想,现代CPU也采用了流水线设计。在工业制造中采用流水线可以提高单位时间的生产量;同样在CPU中采用流水线设计也有助于提高CPU的频率。

只有流水线完全充满时,整个流水线的效率才能充分发挥。

工厂流水线

人员接力

提早

“提前做”是提升处理时效的三个思路之一,另外两个是“少做”和“同时做”。“少做”即精简任务工作量,以达到减少任务耗时的目的,“同时做”即前述的并发技术。

“提前做”是指将任务尽早完成,以提升整体时效。“提前做”的条件是任务满足提早开始的条件,或者提早开始可能带来的错误代价小于正常开始的代价。后一种情况又称作“预测”,一般在预测准确度较高且错误代价较小时采用。

提早

结语

到这里,我们的盘点就暂告一段落了,不知道您发现没有,这些思想看起来其实很普通,我们平常生活、工作中甚至都在使用,而就是这些朴素的思想在支撑着强大的计算机体系,这是不是另一种对平凡而伟大的诠释呢?

计算机体系思想

实际上,计算机领域还有很多等待我们去探究的很有意思的东西,比如关于数据结构、算法、权限、锁、事务、分布式的很多理论及隐藏在它们背后的道理,希望以后有机会再一起研究。

为你推荐
返回顶部