aihot  2017-12-15 11:32:29  云计算 |   查看评论   
快取演算法
把隔最久才会再用的数据剔除──贝雷迪演算法
 
      到了某个时候,只要多学一些知识,就会忘记一些你原本已经知道的事情快取装满时,如果还需要存放其他数据,就必须腾出空间,在电脑科学中,这个腾出空间的程序称为快取替换(cache replacement)或快取剔除(cache eviction)。
 
      这类演算法称为替换策略(replacement policy)或剔除策略(eviction policy),或者直接称为快取演算法。其中最重要的大概是外号「雷斯」的莱斯洛.贝雷迪(László Bélády)设计的演算法。这篇论文说明,快取管理的目标,是尽量减少在快取中找不到需要的数据,以致必须转而至速度较慢的主记忆体寻找的状况。这类状况称为寻页错失(page fault)或快取未中(cache miss)。贝雷迪在论文中提到,最佳的快取剔除策略,是快取装满时就剔除最久之后才会再次需要的数据。
 
      当然,要预测何时会再次需要哪些数据说来容易,做起来可没那么简单。
 
      这个无所不知、有先见之明、能预测未来并执行已知最佳策略的演算法,称为贝雷迪演算法(Bélády's Algorithm),它是电脑科学家说的「预知型」演算法,也就是由预测的数据获取资讯的演算法。听起来很扯其实不然,只是预测未来通常没那么容易,软件工程师也经常开玩笑说,在实际运用贝雷迪演算法时碰到「实作上的困难」。挑战在于,我们要找到一种演算结果得尽可能接近预言的演算法,纵然大多时候我们只能被死死的卡在现在,而且仅能在有限程度上臆测即将发生的事。
 
      我们可以直接采用随机剔除(Random Eviction),把新数据放进快取,随机覆写旧数据。快取理论有个令人惊讶的初步结论就是,尽管这个方式不是十全十美,但还不算太差。事实上,只要有快取,不论我们怎么运用,系统效率都能提高。我们常用的数据一定会很快又放回快取。另一个简单的策略是先进先出( First In, First Out,FIFO),剔除或覆写在快取里停留最久的数据。第三种方式是最近最少使用法(Least Recently Used,LRU):剔除未使用时间最长的数据。
 
      史都华的建议不仅策略完全不同,而且其中之一显然比较优异。贝雷迪以数种状况比较过随机剔除、先进先出和好几种LRU,发现LRU的表现最接近预知。LRU原理的效果源自电脑科学家说的时序局部性(temporal locality):如果程序曾经呼叫某项资讯一次,不久后就可能再度呼叫。时序局部性有一部分源自电脑解决问题的方式(例如执行一个快速进行相关读写的回圈),但其实人类解决问题的方式也有时序局部性。如果你用电脑工作,你可能会在电子邮件、浏览器和文书处理软件之间不断切换。如果你刚刚用过其中之一,代表可能会再用到它。如果没有意外,上次使用时间离现在最久的程序,通常也会隔好一段时间才会用到。
 
街底的那片云──距离非常重要
 
      我们经常把网际网络视为扁平、独立和关系松散的网络,其实完全相反。我们也经常把网际网络视为抽象、虚拟和不受地理环境影响。资讯界说我们的数据放在「云端」,也就是一个散漫又遥远的地方。同样地,这些说法也都不对。事实上,网际网络是一大把实体线路和一个个金属机架,而且它受到的地理环境影响可能超乎你的想像。
 
      工程师设计电脑硬件时,考虑的地理环境影响尺度非常小:速度较快的记忆体通常比较接近处理器,尽量缩短数据行经的线路。现在的处理器时脉循环都以十亿赫兹计算,也就是每次运算的时间不到一奈秒。或者这么说,光在这段时间里只能行进几公分,因此电脑内部的实体布局非常重要。如果把同样的原理套用到非常大的尺度,对于线路长达几千公里的网际网络而言,实际地理环境就显得十分重要。
 
      如果你存放网页内容快取的硬件所在位置更接近使用者,就能更快提供这些网页。目前网络的数据流量大多由内容分配网络(CDN)管理,这个网络在世界各地都有电脑,存放较受欢迎的某些网站的内容副本。如此一来,呼叫这些网页的使用者就能直接取用邻近电脑中的数据,不需要跨越重重中国到原始服务器去取用。
 
      「需要的文件应该尽量接近使用地点」的概念,同样适用纯实体环境。举例来说,亚马逊书店规模庞大的出货中心,通常会避免采图书馆或百货公司这类人类能理解的整理方式,而要员工把货品随意放在仓库里的任何地方(电池可能放在削铅笔机、尿布、烤肉架和铁吉他学习软件旁边),再用条码把每样货品的位置标注在中央数据库中。不过这类刻意表面凌乱的储存系统仍然有个看得见的例外:需求较大的货品会摆在不同区域,比其他货品更容易取用。这块区域就是亚马逊的快取。
快取演算法
      亚马逊把这个原理向前推进一步,并以这项创新发明取得专利。这项专利的主旨称为「预测包裹寄送」,根据媒体的说法,亚马逊能在消费者下手购买之前就寄出货品。亚马逊跟其他科技公司一样,希望拥有类似贝雷迪演算法的预测能力,但在规划这项最新发展时,他们采用了快取概念。它这项专利其实是把最近在某个地区很受欢迎的货品,运送到位于该地区的临时仓库,就像拥有实体货品的CDN一样。接着当消费者下单时,货品距离消费者已经很近。预测个人的购买行为是不小的挑战,但要预测几千人的购买行为,大数法则就能派上用场了。好比说,某一天在柏克莱有人打算订购回收纸浆卫生纸,当他们下单之后,卫生纸已经在运送途中了。
 
家中的快取──收纳空间
 
      虽然快取是为了整理电脑内部的数位数据而诞生,但显然也很适合用来整理实际物品。
 
      这些问题都很相似,因此我们说不定能把电脑科学提供的解决方案,运用到家里。首先,当你决定要保留或舍弃哪些东西,LRU可能就是不错的原则,至少比先进先出好上许多。如果你念大学时买的T恤有时还会穿,就不一定要丢掉。但已经好久没穿的格纹长裤呢?送到二手商店去说不定还比较能遇上有缘人。
 
      第二,充分运用地理环境。你通常在哪里使用这个物品,就把那东西放在离那个地方最近的快取里。教你收纳的书大多没有这样的具体建议,但许多人认为有用的整理方案则经常提到这一点。举例来说,有人说过茱莉.摩根斯坦(Julie Morgenstern)的《收纳其实很容易》(Organizing from the Inside Out)有这么一段话:「我把跑步和运动用品放在前门衣柜底部的箱子里。我希望它尽量接近大门。」
 
      尚未成为橱柜整理原则的最后一个理论,是多层级记忆体阶层。具备快取可提升效率,但具备容量最小且速度最快、到容量最大但速度最慢等多个层级的快取,可能更好。以你的收纳空间而言,橱柜是一个快取层级、地下室是第二个,便利仓是第三个(当然,存取速度会随层级而越来越慢,所以你应该依据LRU原理,来决定哪些物品要从每个层级剔除到下一个层级)。不过我们或许还能添加一层快取来加快速度,也就是再买一个比橱柜更小、取用速度更快也更接近的收纳箱。
 
关于书面数据怎么归档,收纳专家大多说错了
 
      决定保留和舍弃哪些东西之后,最后一个挑战就是该如何整理它们。我们已经讨论过哪些东西要放进橱柜,以及橱柜应该放在哪里,但该怎么整理橱柜里的东西呢?
 
      目前我们经常看到的居家整理建议中,有个常见原则是「把类似的东西集中起来」,野口悠纪雄应该是目前唯一持相反看法的人,他说:「我必须强调一点,我的整理方法的基本原则,不是依据内容来分类文件。」野口是东京大学经济学家,写过一系列为整理办公室和人生提供「超级」技巧的书籍,包括《超级说服法》、《超级工作法》、 《超级学习法》,以及跟本书最有关的《超级整理法》等。
快取演算法
      野口刚开始研究经济学时,经常被信件、数据和手稿等大量数据淹没,每天花许多时间整理,因此开始寻找解决方案。一开始他只是把每份文件放进文件夹,文件夹上标注文件标题和日期,然后把文件夹全部放进大箱子。由于不需要考虑每份文件的正确位置,这样确实能节省时间,但这样没有任何次序可言。到了1990年代初,他缔造了重大突破:他开始一律把文件插入箱子的左手边──他称之为「超级整理法」。
 
      野口指出,不论新文件还是旧文件,都适用左边插入法:每次取出文件用过后要放回箱子时,一定要放到最左边。找文件时也一定要从最左边找起。如此一来,最先看到的就是最近使用过的文件。
 
      野口解释,他会这么做,一开始只是因为塞到最左边比塞回原处容易得多。但他后来慢慢发现,这种方式不只比较简单,而且有效率得多。
 
      用过一件物品后要放回去时,野口归档系统当然可以节省时间,然而这种方式是否容易找到需要的文件,仍然是个问题。毕竟其他效率大师都建议我们,把类似物品集中在一起,跟野口的方法完全不同。
 
      不过电脑科学告诉了我们一件效率大师没办法保证的事。
 
      虽然野口当时并不知道,但他的归档系统其实就是LRU原理(最近最少使用法)的延伸。LRU告诉我们,把新内容加入快取时应该剔除最旧的内容,但没有告诉我们应该把新内容放在哪里。1970和1980年代电脑科学家进行的一连串研究,解答了这个问题。当时他们遇到的问题称为自组织列表问题,状况跟野口的归档困境几乎完全相同。假如你有一组依顺序排列的物品,你必须定时搜寻,找出其中某些物品。搜寻行为本身必须是线性,因为你必须从头开始逐一看过每件物品,但你找到需要的物品之后,可以放回任何位置。此时你应该把物品放在哪里,才能尽可能提高搜寻效率?
快取演算法
      丹尼尔.史利特(Daniel Sleator)和罗伯.塔尔占(Robert Tarjan)于1985年发表关于自组织列表的重要论文,以古典电脑科学方式探讨在所有可能要求顺序下,以各种方式列表的最差情况表现。依照直觉,搜寻从前端开始,所以我们排列顺序时,也希望把最可能用到的物品放在最前端。但最可能用到的物品又是什么?这又回到预测未来能力的问题了。史利特和塔尔占的研究结果显示,某些「十分简单的自调整方案,居然具备一定程度的」预知能力。也就是说,如果我们遵照LRU原理,每次都把物品放回列表的最前端,那么搜寻所花的时间,绝对不会超过我们能预知未来时的两倍。其他演算法都没办法保证这一点。
 
      了解野口归档系统是LRU原理的实行范例可让我们了解,LRU原理不只更有效率,而且是最佳方法。
 
      史利特和塔尔占的研究结果,还提出另一种变化──把野口归档系统旋转90度就是了。简单地说,一箱文件夹转个90度就变成一叠文件,如此一来搜寻文件时自然会从上到下,每次抽出文件后要放回去时不会放回原处,而会放在最上面。
 
      简而言之,自组织列表的数学原理提出了一个十分创新的概念:在书桌上堆一大叠文件不但不是杂乱象征,还是目前已知最精良、效率最佳的数据结构,没必要因而有罪恶感。在别人看来那或许是凌乱、欠缺条理,其实它自有一套条理。由于我们无法预知未来,所以把用过的东西放回最上方是最好的办法。
 

除特别注明外,本站所有文章均为 赢咖4注册 原创,转载请注明出处来自分类整理不是最好的归档方式?快取演算法告诉你最有效率的做法

留言与评论(共有 0 条评论)
   
验证码:
[lianlun]1[/lianlun]