屈原·漁父的算法追求
在分析屈原·漁父的算法追求前,不妨先看看《漁父》一文的原文:
屈原既放, 游于江潭, 行吟澤畔, 顏色憔悴, 形容枯槁。
漁父見而問之曰: 子非三閭大夫與? 何故而至于斯?
屈原曰: 舉世皆濁我獨(dú)清, 眾人皆醉我獨(dú)醒,是以見放。
漁父曰: 圣人不凝滯于物, 而能與世推移。 世人皆濁, 何不沽其泥而揚(yáng)其波? 眾人皆醉,
何不哺其糠而啜其醨? 何故深思高舉, 自令見放為?
屈原曰: 吾聞之, 新沐者必彈冠。 新浴者必振衣。 安能以身之察察, 受物之汶汶者乎? 寧赴湘流, 葬于江魚之腹中, 安能以皓皓之白, 而蒙世俗之塵埃乎?
漁父莞爾而笑, 鼓枻而去, 歌曰: 滄浪之水清兮, 可以濯吾纓, 滄浪之水濁兮, 可以濯吾足, 遂去, 不復(fù)與言。
《漁父》這篇文章中的重要的場景就是“世人皆濁,眾人皆醉”,在軟件中,不妨以內(nèi)存快要耗盡存在很多碎片來比喻世人皆濁,眾人皆醉的場景。
按照漁父的思想,“滄浪之水清兮,可以濯我纓;滄浪之水濁兮,可以濯我足”,滄浪之水清兮,意味著內(nèi)存的分配是正常的, 沒有內(nèi)存碎片,那么自然可以去分配內(nèi)存,并好好地利用一下了(可以濯吾纓)。當(dāng)系統(tǒng)中盡是內(nèi)存碎片(滄浪之水濁兮),難以分配到大片的內(nèi)存,只能分配到一些小內(nèi)存碎片,就讓它做一些小的用途(可以濯吾足)。
再來看屈原的“舉世皆濁我獨(dú)清,眾人皆醉我獨(dú)醒”的思想,也就是內(nèi)存快耗完盡是碎片時(shí),沒有必要去分配內(nèi)存了(我獨(dú)清)。
根據(jù)上面的分析,不難看出,漁父追求的是高可靠性的算法(例如服務(wù)器軟件),當(dāng)內(nèi)存正常時(shí),就去實(shí)現(xiàn)主要的功能計(jì)算,當(dāng)內(nèi)存不足時(shí),就轉(zhuǎn)到另外一個(gè)分支去實(shí)現(xiàn)一些簡單功能的計(jì)算,然后等待系統(tǒng)內(nèi)存回收變正常,反正程序就是不退出,一直可靠地運(yùn)行下去。
屈原追求的是高效的算法(例如客戶端軟件),當(dāng)系統(tǒng)內(nèi)存盡是碎片,效率低下之時(shí),他選擇的不是象漁父一樣跳到另一個(gè)分支去運(yùn)行,而是退出程序,所以屈原***投江了。