1. 程式人生 > >Go語言將在未來成為下一個王者,消滅Java和Python?

Go語言將在未來成為下一個王者,消滅Java和Python?

多核 mvc架構 batis 條件 死鎖 現在 分段 並發處理 高效

在過去幾年中,新的編程語言有所增加:Go或GoLang。 沒有什麽能讓開發人員瘋狂而不是新的編程語言,對嗎?近幾年來,Go語言真是越來越火了。我們來看看Tiobe世界編程語言排行的最新排名,Go已經從去年的第14名上升到今年的第十名了。雖然Java仍然占據編程界的老大哥的地位,但是它所占的份額確實是有所下滑。還有C和C++的市場份額也是逐年下滑。

就現在的條件來說我們無法向處理器添加越來越多的緩存以提高性能,因為緩存具有物理限制:緩存越大,獲得的速度越慢。為處理器添加更多核心也有其成本。而且,這無法無限擴展。這些多核處理器可以同時運行多個線程,從而為圖像帶來並發性。因此,如果我們不能依賴硬件改進,唯一的出路就是提高性能的軟件。但遺憾的是,現代編程語言效率不高。

現在的大多數現代編程語言(如Java,Python等)都來自90年代的單線程環境。 大多數編程語言都支持多線程。 但真正的問題是並發執行,線程鎖定,競爭條件和死鎖。 這些事情使得很難在這些語言上創建多線程應用程序。

例如,在Java中創建新線程不是內存有效的。 由於每個線程消耗大約1MB的內存堆大小,並且最終如果你開始旋轉數千個線程,它們將對堆施加巨大壓力並導致由於內存不足而導致關閉。 此外,如果要在兩個或多個線程之間進行通信,則非常困難。

另一方面,Go於2009年發布,當時多核處理器已經上市。 這就是為什麽Go是在保持並發性的基礎上構建的。 Go有goroutines而不是線程。 它們從堆中消耗了大約2KB的內存。 因此,您可以隨時旋轉數百萬個goroutine。

為什麽Java在逐漸被Go搶占風頭呢?首先,Java能夠做到的事情Go都能夠做到,甚至能夠做得更好。現在Java用於服務端開發的最多,而Go完全能夠勝任。在Java裏面有分布式,多線程,微服務,RPC等,用Go語言也完全不虛,我們公司的分布式,微服務架構就有用Go實現的,一樣非常方便快捷。時下流行的趨勢是大數據,人工智能,數據挖掘,機器學習等,這些用Java做起來很麻煩,都有相應的編程語言和框架,用Go自然也可以做。在這方面Java和Go的能力基本相當。

其次,用Go語言開發更迅速。用Java語言編程,一個簡單的增刪改查的業務你要怎麽做?創建實體類JavaBean,生成Mybatis查詢腳本,寫Service,最後還要寫Controller。整個代碼加起來隨隨便便都有300行以上了。如果用Go語言來書寫,代碼層次上來看可以簡潔很多。當然,用Go做MVC架構的開發大致流程和Java也沒差。

再次,和臃腫龐大的Java框架相比,Go就顯得非常迷你了。Go語言是一款極為簡約的編程語言,他的框架也不似Java相關框架那麽龐大臃腫。和它的開發效率一樣,它的執行效率也是各大編程語言裏面的佼佼者。它可以在一個進程中執行無數個寫成,用來確保它的高效性。現在的很多微服務框架都選用Go作為開發語言,就是因為它快速並且高效。

其他好處是:

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

Goroutines的啟動時間比線程快。

Goroutines帶有內置的原語,可以在它們之間(通道)安全地進行通信。

Goroutines允許您在共享數據結構時避免使用互斥鎖。

此外,goroutines和OS線程沒有1:1映射。 單個goroutine可以在多個線程上運行。 Goroutines被多路復用到少量的OS線程中。

Go直接在底層硬件上運行。與其他現代高級語言(如Java / Python)相比,使用C,C ++的最大好處是它們的性能。 因為C / C ++是編譯的而不是解釋的。

處理器理解二進制文件。 通常,在編譯項目時使用Java或其他基於JVM的語言構建應用程序時,它會將人類可讀代碼編譯為字節代碼,JVM或在底層操作系統之上運行的其他虛擬機可以理解這些代碼。 執行時,VM會解釋這些字節碼並將其轉換為處理器可以理解的二進制文件。

而在另一方面,C / C ++不會在VM上執行,並且從執行周期中刪除一步並提高性能。 它直接將人類可讀代碼編譯為二進制文件。

但是,在這些語言中釋放和分配變量是一個巨大的痛苦。 雖然大多數編程語言使用垃圾收集器或引用計數算法處理對象分配和刪除。

Go帶來了世界上最好的一面。 像C / C ++這樣的低級語言,Go是編譯語言。 這意味著性能幾乎接近較低級別的語言。 它還使用垃圾收集來分配和刪除對象。 所以,不再有malloc()和free()語句! 涼!!!

用Go編寫的代碼易於維護,Go語言沒有像其他語言那樣瘋狂的編程語法。它的語法非常整潔。谷歌Go的設計者在創建語言時就考慮到了這一點。由於谷歌擁有非常龐大的代碼庫,成千上萬的開發人員正在開發相同的代碼庫,因此對於其他開發人員來說代碼應該很容易理解,而代碼的一段代碼應該對代碼的另一部分產生最小的副作用。這將使代碼易於維護且易於修改。

以上更改使Go與其他語言有很大不同,它使Go中的編程與其他語言不同。 你可能不喜歡上面的一些觀點。 但是,如果沒有上述功能,您就無法對應用程序進行編碼。 您所要做的就是再寫2-3行。 但從積極的方面來說,它將使您的代碼更清晰,並為您的代碼增加更多清晰度。

Go是由Google設計和支持的。 谷歌擁有世界上最大的雲基礎設施之一,並且規模龐大。 Go由Google設計,旨在解決支持可擴展性和有效性的問題。 這些是您在創建自己的服務器時將面臨的相同問題。更多的是Go也被一些大公司使用,如Adobe,BBC,IBM,Intel。

盡管Go與其他面向對象的語言非常不同,但它仍然是同一個野獸。 Go為您提供高性能,如C / C ++,超高效的並發處理,如Java,以及Python / Perl等代碼的樂趣。

Go語言將在未來成為下一個王者,消滅Java和Python?