偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

為什么說2017年你必須要學習Go了

開發(fā) 開發(fā)工具
Go是未來的服務端語言— Tobias Lütke, Shopify。在過去的幾年中,Golang逐步流行起來。 還有什么能比一門新語言讓碼農們瘋狂呢? 因此,我開始學習了一段時間Golang,在這里我將告訴你為什么你也應該學習這種新語言。

為什么要學習Go

Go是未來的服務端語言— Tobias Lütke, Shopify。在過去的幾年中,Golang逐步流行起來。 還有什么能比一門新語言讓碼農們瘋狂呢? 因此,我開始學習了一段時間Golang,在這里我將告訴你為什么你也應該學習這種新語言。 在本文里我不會告訴你怎么寫hello world。 我要分析計算機硬件軟件的當前階段,以解釋為什么我們需要像Go這樣的新語言?

硬件限制

摩爾定律正在失效 ***個具有3.0GHz時鐘速度的Pentium 4處理器是由英特爾于2004年推出的。 而今天,我的Mackbook Pro 2016的CPU時鐘速度為2.9GHz。 可以看到在過去的十年中,CPU處理能力沒有太大的進步。 您可以在下面的圖表中看到這一點。

從上面的圖表可以看出,單線程的性能和處理器的頻率在過去的十年內保持平穩(wěn)。如果你認為添加更多的晶體管是解決方案,那么你錯了。這是因為在較小的尺度上一些量子性質開始出現(xiàn)(如隧道,因為它實際上用掉更多的更多的晶體管(為什么?)并且添加晶體管的性價比在下降。 所以制造商開始向處理器添加越來越多的核心?,F(xiàn)在我們有四核和八核CPU可用。 同時我們還引入了超線程。還向處理器添加更多緩存以提高性能。 但上述解決方案也有其局限性。我們不能向處理器添加更多的緩存以提高性能,因為緩存具有物理限制:緩存越大,緩存越慢。向處理器添加更多核心也具有成本。此外,這都不能***擴展。這些多核處理器可以同時運行多個線程,并在紙面上帶來并發(fā)性。我們稍后將討論這一問題。 所以,如果我們不能完全依靠硬件的改進來提升性能,更高效的軟件也是我們需要考慮的手段。但遺憾的是,現(xiàn)代編程語言并不高效。

Go has goroutines!!

如上所述,硬件制造商正在向處理器添加越來越多的核心以提高性能。使用這些處理器的所有數(shù)據(jù)中心,在未來幾年內核數(shù)量將會大大增加。更重要的是,今天的應用程序使用多個微服務來維護數(shù)據(jù)庫連接,消息隊列和緩存。因此,我們開發(fā)的軟件和編程語言應該輕松支持并發(fā)性,并且它們應該隨著核心數(shù)量的增加而輕松擴展。 但是,大多數(shù)現(xiàn)代編程語言(如Java,Python等)發(fā)明于90年代的單線程環(huán)境。當然這并不意味著他們不支持多線程(譯者的話Python確實不支持多線程)。大多數(shù)編程語言支持多線程。真正的問題來自并發(fā)執(zhí)行和線程鎖,競爭條件和死鎖。這些東西使得在這些語言上創(chuàng)建多線程應用程序很困難。 例如,在Java中創(chuàng)建新線程會消耗大約1MB的內存堆大小。最終如果你創(chuàng)建了數(shù)千個線程,這將對堆內存造成巨大的壓力,并將由于內存不足而被操作系統(tǒng)殺死。此外,如果你想在兩個或多個線程之間進行通信,也比較困難。 另一方面,Go在2009年發(fā)布時,多核處理器已經(jīng)流行起來。這就是為什么GoLang以并發(fā)為***要務。 Go使用goroutines而不是線程。新建goroutine只使用近2KB的內存,你可以創(chuàng)建數(shù)百萬goroutine。

當然還有其他的好處:

  • 具有可增長的分段堆。這意味著他們只在需要時才使用更多的內存。

  • Goroutines的啟動時間比線程快。

  • Goroutines帶有內置的原語,以便在它們之間(channel)安全地通信。

  • Goroutines允許您避免在共享數(shù)據(jù)結構時使用互斥鎖。

  • 此外,goroutines和OS線程不是1:1映射。 單個goroutine可以在多個線程上運行。 Goroutine被復用到少量的OS線程中。

以上幾點,使Go非常強大,可以在處理并發(fā)(如Java、C和C++)的同時保持代碼的優(yōu)雅(像Earlang)。

Go直接運行在硬件上

使用C、C ++的一個***的好處是它們的性能比其他現(xiàn)代高級語言(如Java / Python)更強。 因為C / C ++是編譯執(zhí)行而不是解釋執(zhí)行的。 當您使用Java或其他基于JVM的語言構建應用程序時,它將代碼編譯為字節(jié)碼,在執(zhí)行時,JVM解釋字節(jié)碼并將其轉換為處理器可以理解的二進制代碼。 

而C、C 不在VM上執(zhí)行,從執(zhí)行周期中刪除一個步驟,并提高了性能。 他們直接將代碼編譯成二進制代碼。 

但是在C/C中釋放和分配內存太過痛苦。 即使大多數(shù)編程語言可以使用垃圾收集器或引用計數(shù)算法處理對象分配和刪除。 Go同時擁有上面提到的好處。 Go是像C/C++這樣的低級語言并且是編譯型語言。 這意味著它的性能幾乎更接近低級語言。 并且Go還使用垃圾回收來分配和釋放內存。 所以不需要malloc和free!??!

Go代碼容易維護

Go有著非常整潔和干凈的語法。Go的設計者在創(chuàng)建語言時考慮到了這一點。 由于google有非常大的代碼庫,成千上萬的開發(fā)人員正在使用同一個代碼庫,代碼應該易于其他開發(fā)人員理解。這將使代碼易于維護和修改。 Go故意去掉了很多現(xiàn)代OOP語言具有的功能。

  • 沒有類。 Go只有結構體而不是類。

  • 不支持繼承。 這將使代碼容易修改。 在其他語言(如Java / Python)中,如果ABC類繼承了類XYZ,并且在類XYZ中進行了一些更改,那么這可能會在繼承XYZ的其他類中產生一些副作用。 通過刪除繼承,Go使得很容易理解代碼(因為沒有超類)。

  • 沒有構造函數(shù)。

  • 無注解(annotation)。

  • 沒有泛型(generics)。

  • 沒有異常。

以上的差異使Go與其他語言非常不同。 當然你可能不喜歡上面的一些點。 但是,在沒有上述功能的情況下 你需要做的僅僅是多寫2-3行代碼。 然而這樣會使你的代碼更加簡潔易懂。

上圖顯示Go幾乎與C/C++一樣高效,同時保持代碼語法簡單,如同Ruby,Python。 這是一個對人類和機器來說雙贏的局面! 與其他新語言(像Swift)不同,Go的語法非常穩(wěn)定。 自從2012年***公開發(fā)布1.0版以來,它保持不變。這使得它向下兼容。

Go的背后是Google

  • 雖然這不是直接的技術優(yōu)勢。 但Go是由Google設計和支持的。 Google擁有世界上***的云基礎架構之一,并且可以大規(guī)模擴展。Go是由Google設計的,以解決他們需要的可擴展性性問題。這些也是你在創(chuàng)建自己的服務時將面臨的問題。

  • Go也被一些大公司使用,如Adobe,BBC,IBM,英特爾等等。

結論

  • 即使Go和其他面向對象的語言非常不同,但它同時為您提供高性能(如C/C++),超級好用的并發(fā)處理(如Java)和簡潔的代碼(如Python/Perl)。

  • 如果你沒有任何計劃學習Go,我還是會說軟件開發(fā)人員需要寫出超高效的代碼。開發(fā)人員需要了解硬件并相應地優(yōu)化程序。優(yōu)化軟件以運行在更便宜和更慢的硬件(如IOT設備)以提升最終用戶體驗。

責任編輯:張燕妮 來源: Go中國
相關推薦

2023-05-12 14:49:47

CSS框架前端

2022-02-22 22:44:46

接口源碼對象

2017-02-07 09:37:46

2016-04-01 11:12:26

企業(yè)IT數(shù)據(jù)孤島商業(yè)智能

2014-07-02 16:51:08

WOT2014高效技術團隊

2017-08-17 11:11:41

深度學習弱智能機器學習

2023-01-03 08:07:33

Go字符串指針

2012-05-24 10:29:54

編程程序員

2016-09-27 21:25:08

Go語言Ken Thompso

2022-07-24 09:56:40

大數(shù)據(jù)技術

2020-12-03 06:37:48

Go進程

2019-08-06 14:54:22

Hadoop數(shù)據(jù)集海量數(shù)據(jù)

2015-07-13 10:27:40

GoRust競爭者

2021-04-09 09:55:55

DockerGoLinux

2021-12-06 12:48:40

Gosyncatomic

2019-04-09 08:15:27

SEO優(yōu)化工具網(wǎng)站

2015-05-15 09:56:26

程序員代碼

2015-05-13 13:59:02

碼農拒絕

2018-09-21 11:11:34

備份離線自動

2012-02-08 10:02:53

Web
點贊
收藏

51CTO技術棧公眾號