成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

哪種編程語言最省電?以及,編程質量與耗電多少有關?

譯文 精選
開發 前端
去年,來自葡萄牙三所不同大學的六名研究人員決定調查這個問題,最終發布了一篇題為《編程語言的能效》的論文。他們在運行用27種不同語言編寫的10個編程問題的解決方案時,監測了每種語言使用的電量、速度和內存使用情況。

編譯 | 伊風

出品 | 51CTO技術棧(微信號:blog51cto)

能量使用數據是否能告訴我們編程語言的質量?

圖片圖片

去年,來自葡萄牙三所不同大學的六名研究人員決定調查這個問題,最終發布了一篇題為《編程語言的能效》的論文。他們在運行用27種不同語言編寫的10個編程問題的解決方案時,監測了每種語言使用的電量、速度和內存使用情況。

圖片圖片

更具體的說,他們使用了計算機語言基準游戲(Computer Language Benchmarks Game)的10個問題,這是一個用于比較性能的自由軟件項目,包括一組標準的簡單算法問題以及運行測試的框架。(以前被稱為“大計算機語言對決”。)“這使我們能夠獲得一個可比較、有代表性且廣泛的程序集……以及編譯/執行選項和編譯器版本。”

進行各種基準測試是重要的,因為他們的結果最終取決于執行的測試。例如,總體上C語言被證明是最快且最節能的。但在涉及掃描DNA數據庫中特定基因序列的基準測試中,Rust是最節能的——而C排在第三位。   

然而,即使在同一測試中,“最佳”語言也取決于你的標準。在該測試中,C也是第二快的語言(再一次排在Rust之后)。但如果按內存使用情況排序,Rust下降了整整九位。而Fortran是該測試中第二節能的語言,但按執行時間排序時也下降了六位。

更快的語言并不總是最節能的。

研究人員指出,他們“嚴格遵循”CLBG項目關于編譯器版本和最佳優化標志的指南。使用Intel的Running Average Power Limit工具測量功耗,每個程序不僅執行一次,而是執行了10次,“以減少冷啟動和緩存效應的影響,并能夠分析測量結果的一致性,避免異常值。”(因此,他們報告說,“測量結果相當一致。”)為了增加一致性,所有測試都在運行Linux Ubuntu Server 16.10(內核版本4.8.0-22-generic)的臺式機上進行,配有16GB RAM和3.20GHz Haswell Intel Core i5-4460 CPU。

在他們的論文中,研究人員指出了一些有趣的結果。

“平均而言,Lisp消耗的能量是C的2.27倍(131.34J),執行時間是C的2.44倍(4926.99ms),所需內存是Pascal的1.92倍(126.64Mb)。”

他們還比較了編譯語言與解釋語言的結果(還有一個單獨的類別是運行在虛擬機上的語言)。論文還包括了不同編程范式的比較——包括函數式編程和命令式編程,以及面向對象編程和腳本編程。

1.更快的語言是否更綠色?

論文仔細研究了一個常見的假設,即更快的程序總是使用更少的能量,指出這并不像物理定律那樣簡單:E(能量)= T(時間)x P(功率)。研究人員指出,這部分是因為功率不是以一致的速率消耗的,這可能影響了其他研究人員關于程序運行時間是否影響能量消耗的工作。(“關于這個問題的結論有時會有所不同……”)在他們的一個基準測試中,一個Chapel程序比一個等效的Pascal程序執行時間減少了55%,但該Pascal程序使用的能量卻少了10%。

因此,盡管人們普遍認為程序運行得更快能量消耗會減少,研究人員明確表示,“更快的語言并不總是最節能的。”

這可能是一個難以回答的問題,因為功耗受多種因素的影響(包括編譯器的質量和使用的庫)。但最終,研究人員甚至能夠根據功耗是由CPU還是DRAM消耗來分解能量消耗——得出結論,平均而言,無論基準程序是編譯的、解釋的還是在虛擬機上運行的,CPU消耗的功率大約占88%。

有趣的是,解釋語言顯示出比較大的變化,CPU有時消耗的功率高達92.90%,有時低至81.57%。

在研究結果后,研究人員還得出結論,DRAM峰值使用與能量消耗之間的關系“幾乎不存在”。

這項研究為一個長期存在的問題提供了一些見解:更快的語言是否更綠色?是的,事實是,“在前五個最節能的語言中,它們在按執行時間排序時保持了它們的排名,且能量和時間值之間的差異非常小。”

實際上,對于10個基準問題中的9個,最高得分(無論是速度還是能效)都來自于三種總體最快和最節能的語言之一——這并沒有讓研究人員感到驚訝。“眾所周知,這三種頂級語言(C、C++和Rust)被認為是高度優化且執行性能高效的,正如我們的數據所示。”

但當你按運行時間對其他24種語言進行排序時,你不會看到相同的順序,而按能效排序時也不會。“只有四種語言在能量和時間排名中保持一致(OCaml、Haskell、Racket和Python),而其余的則完全被打亂。”

即使在單個基準測試中,也有快速執行的語言并不是最節能的情況。

2.編譯語言:又快又節能

還有其他有趣的結果。編譯語言“往往”是最節能和運行最快的——他們的論文甚至可以用一個數字量化這一差異。“平均而言,編譯語言執行解決方案所需的能量為120J,而對于虛擬機和解釋語言,這一值分別為576J和2365J。”

研究人員在比較執行時間時也應用了同樣的精確度,得出結論,平均而言,“編譯語言需要5103ms,虛擬機語言需要20623ms,解釋語言需要87614ms。”

在這兩個類別中,前五名語言中的四個是編譯的。(例外是Java。)

圖片圖片

最慢的五種語言都是解釋的(interpreted):Lua、Python、Perl、Ruby和Typescript。而消耗能量最多的五種語言也是解釋的:Perl、Python、Ruby、JRuby和Lua。

對于Google的新編程語言Carbon使用了多少能量,目前還沒有定論。

但與此同時,在使用正則表達式操作字符串時,五種最節能的語言中有三種是解釋語言(TypeScript、JavaScript和PHP),盡管在其他場景中它們往往不太節能。

編譯語言還占據了所需內存空間最少的前五個位置。

圖片圖片

“平均而言,編譯語言需要125Mb,虛擬機語言需要285Mb,解釋語言需要426Mb,”研究人員報告說。與此同時,解釋語言占據了內存空間消耗最多的五個位置中的四個:JRuby、Dart、Lua和Perl。(盡管Erlang不是一種解釋語言,但它也會出現在最底層五個位置中,介于Dart和Lua之間)。

“如果按其編程范式排序,命令式語言需要116Mb,面向對象語言需要249Mb,函數式語言需要251Mb,而腳本語言需要421Mb。”

實際上,在比較不同的范式時,命令式編程往往表現最佳。其基準程序平均使用的能量更少——運行速度也更快——比面向對象、函數式和腳本范式的基準程序。

圖片圖片

但需要考慮的因素有很多。“顯然,不同的編程范式,甚至是同一范式內的語言,對能量消耗、時間和內存的影響完全不同,”研究人員寫道。然而,哪個因素最重要將取決于你的場景。(例如,后臺任務不總是需要最快的運行時間。)

而且有些應用程序需要考慮兩個因素——例如,能量使用和執行時間。在這種情況下,“C是最佳解決方案,因為它在單一目標中都占優勢,”研究人員寫道。如果你想節省時間同時使用更少的內存,C、Pascal和Go“是等效的”——如果你關注所有三個變量(時間、能量使用和內存使用),也是如此。但如果你只是想節省能量同時使用更少的內存,你最好的選擇是C或Pascal。

圖片圖片

3.寫在最后

在論文的最后,研究人員補充說,進一步的研究希望能夠檢查總內存使用隨時間的變化是否與能量消耗更好地相關聯。

他們在網上共享了他們的數據,建議這可以讓未來的研究人員更容易比較.NET語言或JVM語言。對于使用移動應用程序、物聯網系統或其他從有限電源中汲取能量的應用程序的開發人員來說,功耗是一個主要關注點。

但最終,這項研究可能也會讓程序員們感到他們最討厭的東西:模糊性。研究人員報告說,如果你在尋找一種最好的編程語言,“這個問題沒有具體和最終的答案。

“盡管每個基準中最節能的語言幾乎總是最快的那一個,但事實是,沒有一種語言始終優于其他語言,”研究人員總結道。“使用一種語言的情況是確定該語言是否是最節能選擇的核心方面。”

參考鏈接:https://thenewstack.io/which-programming-languages-use-the-least-electricity/

責任編輯:武曉燕 來源: 51CTO技術棧
相關推薦

2020-10-27 15:01:25

編程語言PythonJava

2013-04-11 09:51:43

編程語言

2019-02-21 09:00:00

PythonGolang編程語言

2019-04-24 08:34:46

編程語言PythonJava

2021-01-13 10:40:42

編程語言PLCGraph

2010-03-01 09:43:09

Python編程語言

2018-01-02 14:00:16

編程語言Bug

2021-09-18 14:59:58

語言PythonC語言

2019-01-25 18:00:12

編程語言PythonJava

2013-07-19 09:31:09

2011-05-30 15:00:06

編程語言

2015-08-03 09:19:37

2011-12-20 15:57:32

程序員

2017-11-14 06:10:15

機器學習編程語言數據科學

2015-07-31 09:42:56

編程語言黑客馬拉松

2020-12-30 10:38:54

漏洞編程語言加密

2022-05-26 08:01:29

PythonR編程語言

2022-08-12 08:00:00

編碼語言開發工具

2009-05-13 11:40:19

編程語言開發語言Perl

2020-05-11 10:25:38

編程語言J開發Python
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 精品国产18久久久久久二百 | 久久精品欧美一区二区三区不卡 | 亚洲九九 | 亚洲激情在线观看 | 日本欧美在线 | 亚洲一区在线日韩在线深爱 | 久久人体视频 | 天天射天天干 | 成人在线免费观看视频 | 亚洲成人免费视频 | 国产成人影院 | 国产精品美女一区二区 | 亚洲不卡| 精品一区二区在线看 | 一级黄色片免费 | 久久亚洲欧美日韩精品专区 | 一区二区视频在线 | av一区二区三区四区 | 国产精品久久久久久久久动漫 | 久久久久久久久中文字幕 | 超碰人人艹 | 亚洲毛片一区二区 | 日本不卡一区 | 久久久蜜桃一区二区人 | 亚洲成人午夜电影 | 国产一区二区三区免费观看视频 | 久久噜噜噜精品国产亚洲综合 | 欧美2区 | 国产欧美精品区一区二区三区 | 亚洲一区 | 亚洲国产精品视频一区 | 波多野结衣中文视频 | 成人在线视频网站 | 日韩毛片在线观看 | 青青久在线视频 | 久久久999免费视频 999久久久久久久久6666 | 欧美一区视频 | 久久小视频| 91久久久久久久 | 天天干夜夜拍 | 美国av毛片 |