哪種編程語言又快又省電?架構也要節能環保

現在各行各業大家都在提倡生態節能環保,突發奇想,我們用的編程語言哪個更加環保嫩?

在手機快沒電時,管理軟件往往會提醒我們關掉某些耗電量高的應用。可見,除了硬件廠商外,軟件廠商也應該重視能耗問題。

當能耗也成爲了一個重要指標,我們要怎麼選擇編程語言?2017 年,由 6 名葡萄牙研究者組成的團隊決定對這一問題進行調查並發表了一篇名爲《Energy Efficiency Across Programming Languages》的論文。他們用 27 種語言寫出了 10 個問題的解決方案(遵循同樣的算法),然後運行這些方案,記錄每種編程語言消耗的電量以及速度和內存使用情況,得到的排序結果如下圖所示:

編程語言節能環保

具體而言,研究者使用了來自 Computer Language Benchmarks Game(一個用於比較性能的免費軟件項目,其中包含一組標準的算法問題和用於運行測試的框架)的 10 個問題,使得研究更有可比性和代表性。

運行各種基準測試非常重要,因爲它們的結果會由於所執行的測試而有所不同。例如,總體而言,C 語言被認爲是最快的,也是最節能的。但是在涉及掃描 DNA 數據庫中特定基因序列的基準測試中,Rust 是最節能的,而 C 語言位居第三。

研究人員總結出,無論是編譯型語言、解釋型語言還是虛擬機,其實大部分能量(平均 88% 左右)是由 CPU 消耗的。

在對實驗結果分析研究之後,研究者還得出結論:DRAM 的峯值使用量與能耗之間「幾乎沒有關係」。該研究爲一個長期存在的問題提供了答案:「速度更快就更環保嗎?」是的,的確是這樣,在按照執行時間進行排序時,前 5 種最節能的語言依然排在前 5 名,而且在能量和時間值方面的差距很小。

編譯型語言似乎是最節能和運行最快的語言,作者甚至可以在論文中用數字量化這種差異。

平均而言,編譯語言需要花費 120J 能量來運行解決方案,而虛擬機和解釋型語言要分別花費 576J 和 2365J。

在比較執行時間時,研究者也採用了相同的精度,得出的結論是:平均而言,編譯語言花費 5103 毫秒,虛擬機語言花費 20623 毫秒,解釋型語言花費 87614 毫秒。

5 種最慢的語言都是解釋型語言:Lua、Python、Perl、Ruby 和 Typescript。5 種能耗最多的語言也都是解釋型語言:Perl、Python、Ruby、JRuby 和 Lua。 但同時,在使用正則表達式操作字符串時,5 種最節能的語言中有三種(TypeScript、JavaScript 和 PHP)是解釋型語言。儘管在其他情況下,它們往往不是很節能。

編譯型語言在佔用內存最少的排名中也佔據了前 5 名。

研究者稱:「平均而言,編譯語言需要 125Mb,虛擬機語言需要 285Mb,而解釋語言則需要 426Mb。」具體來說,有 4 種解釋型語言在這項排名中墊底,這意味着它們消耗了最多的內存空間。

「如果按照它們的編程範式進行排序,命令式語言需要 116Mb,面嚮對象語言需要 249Mb,函數式編程語言是 251Mb,腳本需要 421Mb。」 實際上,當比較不同範式時,命令式編程通常排在首位。與面向對象、函數式以及腳本範式的基準程序相比,命令式編程的基準程序平均使用的能源少得多,運行速度也更快。

但是有很多因素需要考慮。研究者稱「很顯然,不同的編程範式,甚至同一範式中的語言對能耗、時間、內存的影響也完全不同」。但是,其中哪一個因素最重要取決於你自己的需求情況(例如,後臺任務並不總是需要最快的運行時間)。

某些應用程序需要同時考慮兩個因素,如能耗和執行時間。研究者稱:「在這樣的情況下,C 語言是最佳的解決方案,因爲它在這兩個方面都很有優勢。」如果你想在節省內存的同時節省時間,那麼 C 語言、Pascal 和 Go 語言都可以。如果你正在觀察 3 個變量(時間、能耗和內存使用情況),那麼結論也是一樣的。但是,如果你只是想在使用更少內存的同時節省能源,那麼最好的選擇是 C 語言或 Pascal。

其實整個系統架構在設計期初和不斷更新完善的過程我們都需要考慮節能環保和效率,同時也希望大家都能寫節能環保的代碼。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章