美文网首页编程入门
软件设计中的生活智慧

软件设计中的生活智慧

作者: 杨小伟的世界 | 来源:发表于2018-11-12 08:13 被阅读0次

    有不少朋友觉得软件是个神秘的东西,好像就一个程序员在屏幕前敲敲键盘,一切就跑到了眼前。而现在软件的种类和数量已经非常多了,据说Github上仓库的数量已经超过了一亿。这些软件,使用不同的语言、有着不同的背景和用户,当然也运用着不同的技术。别说小白,连专业人士想要了解所有的门道都不太现实。

    那软件设计就真的这么神秘,这么毫无章法可循?

    正所谓,大道相通。虽然在细节上,因为场景和技术的不同,软件设计呈现着千变万化的样子,但是如果我们抽丝剥茧则会发现,某些软件设计中的思想同我们生活中的智慧不谋而合。

    最近在学习内核中内存管理相关的模块,在阅读的过程中发现:

    设计软件时可以从生活智慧中借鉴,安排生活或许也能从软件设计中汲取养分

    看到这里,你是不是有点迫不及待想了解一番呢?

    分类

    相信大家在生活中,分类这个技能是非常常用的。

    • 收纳衣物会按照类别、季节存放
    • 收纳碗筷会按照类别、大小存放
    • 收纳工具会按照用途、大小存放

    当然,在日常生活中,我们可能常常忽略分类这个技能。因为我们保有的物品数量并不多,偶尔错放、乱放也不会带来太多的不便。但是下面这种情况如果不分类妥当,估计会让人抓狂。

    米兰达可儿衣橱揭秘:裙子几千条鞋子几百双

    作为鞋子不超过两位数的小编,无法想象要这么多鞋子干啥。更不能想象的是名模出门的时候得花多久挑鞋子。但是有一点能想到的是

    她一定分类摆放了她的鞋子。

    那我们就来看一下名模的鞋柜。

    鞋柜

    个人觉得这只是她所有鞋子的冰山一角,因为没有长筒靴!视频拍摄时正值夏季,所以鞋柜中都是夏天的鞋子。这里其实隐藏了将要说的第二种智慧,我们在此先跳过。

    第一眼看这个鞋柜的分类其实不是那么清晰,不过仔细看一下摆放还是能看出一点点分类的规律。

    • 最下一排都是凉鞋
    • 倒数第二排都是黑色
    • 红色的鞋子都在最上面

    总体来看米兰达可儿在鞋子的整理上还算是井井有条的。

    那分类的智慧在软件设计中如何运用呢?其实在内存管理模块中运用得非常多。

    • 按照NUMA分类
    • 按照ZONE分类
    • 按照页大小分类

    怎么样,现在看是不是感觉就那么回事儿?不过是按照不同的属性分类,方便使用和归还。以后自己设计软件,是不是也可以尝试这招?

    预取

    上一小节中我们卖了个关子

    米兰达可儿冬季的鞋子在哪里?

    当然我也不知道她放在了哪里,也不确定是不是她每年都重换一批。就我们日常生活的经验来讲,我们自己是怎么做的呢?

    通常到换季的时候,我们会把当季的衣物整理出来放在鞋柜衣橱,而过季的衣物则收纳到箱子中。

    怎么样,这个方法是不是很简单,而且大部分人都用过?这么好用的方法当然在软件设计中不会错过,而这个方法在计算机界就叫做预取

    把常用的资源取出多份,而不用每次都取一个

    日常生活中除了衣物整理,还有很多地方都用到这个思想。

    • 厨房的调味料我们会倒一些在器皿中,而不是把整袋糖盐放在桌上
    • 钱包里的现金我们会放上一部分,而不是随身携带所有的现金

    我想大家在这方便比我更有经验和智慧。

    那再来说说内存管理中这个思想的运用。

    • per_cpu_pageset
    • slub

    这两者在设计上都可以理解成一个钱包。每次想要买包子,但是钱包里钱不够了。我都是从银行取一百或者几百放钱包里,而不是就取个几块钱买个包子。这样做的目的就是减少去银行取钱的时间。能理解到这点也就理解了软件设计中,为什么要这么做了。

    PS:现在都手机支付了,估计这个场景马上就不适用了。所以看出,我们这一代不是互联网的原住民。

    专有

    这个智慧主要运用在规模增大的情况下,虽然平时我们不多见,但是仔细想想也是会发生的。

    • 爸爸要看新闻,妈妈要看电视剧,但是电视只有一个
    • 丈夫要开车上班,妻子要开车送娃,但是车就一辆

    遇到这种情况有两个办法:满足其中一个、再买一个。

    第一种方法通常我们称之为排队。这个情况在日常生活中也是非常常见的,而在计算机系统中也有非常多的排队理论。这里我们暂且不说。主要看第二种土豪的方法,

    可能有的人会觉得这个方法太土,没有什么技术含量。但是在某一方资源充足的情况下,这个方法却是非常直接有效的。现实中为了争一个电视机、卫生间、车子的例子貌似也不少,只不过钱是我们现实生活中很大的障碍。

    但是在软件中,情况就会有所不同。比如在内存管理中,为了提升系统的性能,就可以牺牲一些内存空间,为每一个cpu分配专门的队列管理内存。

    • per_cpu_pageset
    • slub

    还是这两者,内核设计中就是通过给每个cpu分配专属队列,来保证每个计算资源能够尽量的发挥自己的能力,而不用因为没有电视机、卫生间或者车子而等在那里,发生不必要的矛盾。这也是提升系统扩展性的方式之一。

    好了,小编的叨叨今天就到这里。

    希望本文不论是对专业的软件从业者,还是对软件的爱好者,甚至是热爱生活的人,都有一点点的帮助和启发。

    PS:对内存管理感兴趣,想了解更多的朋友,可以访问我的文章(http://t.cn/Ev3UwoG)中内存管理部分。欢迎交流。

    相关文章

      网友评论

        本文标题:软件设计中的生活智慧

        本文链接:https://www.haomeiwen.com/subject/lzqqfqtx.html