1. 程式人生 > 遊戲攻略 >《寶可夢朱紫》高效刷閃經驗分享

《寶可夢朱紫》高效刷閃經驗分享

為什麼你應該學習Go語言?

2022-12-12 14:09:08

為什麼網際網路世界需要Go語言

世界上已經有太多太多的程式語言了,為什麼又出來一個Go語言?

硬體限制:摩爾定律已然失效

摩爾定律:當價格不變時,積體電路上可容納的元器件的數目,約每隔18-24個月便會增加一倍,效能也將提升一倍。 換言之,每一美元所能買到的電腦效能,將每隔18-24個月翻一倍以上。

從上面的圖表可以看出,近十年單執行緒效能和處理器頻率保持穩定。我們不能像之前一樣把新增更多電晶體當成是解決方案,因為在較小規模上一些量子特性開始出現(如隧道效應),並且因為在同樣小的空間裡放置更多電晶體的代價非常昂貴,每1美元可以新增的電晶體數量開始下降。

製造商開始從其他方面提高處理器的效能:

  1. 向處理器新增越來越多的核心,如四核和八核CPU。
  2. 發明了超執行緒技術。
  3. 為處理器添加了更多快取以提高效能。
    但上述解決方案也有其自身的侷限性。因為成本原因我們不能無限制的為計算機新增核心,也無法無限制的新增快取來提高效能,因為快取越大,取值的效能越低。

我們沒有辦法在硬體上一直取得突破,我們需要提高軟體的效能或者說我們需要高效能的軟體。

Go語言為併發而生

如上所述,硬體製造商正在為處理器新增越來越多的核心以提高效能。所有資料中心都在這些處理器上執行,更重要的是,今天的應用程式使用多個微服務來維護資料庫連線,訊息佇列和維護快取。因此,開發的軟體和程式語言應該可以輕鬆地支援併發性,並且應該能夠隨著CPU核心數量的增加而可擴充套件。

但是,大多數現代程式語言(如Java,Python等)都來自90年代的單執行緒環境。雖然一些程式語言的框架在不斷地提高多核資源使用效率,例如 Java 的 Netty 等,但仍然需要開發人員花費大量的時間和精力搞懂這些框架的執行原理後才能熟練掌握。

Go於2009年釋出,當時多核處理器已經上市。Go語言在多核併發上擁有原生的設計優勢,Go語言從底層原生支援併發,無須第三方庫、開發者的程式設計技巧和開發經驗。

很多公司,特別是中國的網際網路公司,即將或者已經完成了使用 Go 語言改造舊系統的過程。經過 Go 語言重構的系統能使用更少的硬體資源獲得更高的併發和I/O吞吐表現。充分挖掘硬體裝置的潛力也滿足當前精細化運營的市場大環境。

Go語言的併發是基於 goroutine 的,goroutine 類似於執行緒,但並非執行緒。可以將 goroutine 理解為一種虛擬執行緒。Go 語言執行時會參與排程 goroutine,並將 goroutine 合理地分配到每個 CPU 中,最大限度地使用CPU效能。開啟一個goroutine的消耗非常小(大約2KB的記憶體),你可以輕鬆建立數百萬個goroutine

goroutine的特點:

  1. goroutine具有可增長的分段堆疊。這意味著它們只在需要時才會使用更多記憶體。
  2. goroutine的啟動時間比執行緒快。
  3. goroutine原生支援利用channel安全地進行通訊。
  4. goroutine共享資料結構時無需使用互斥鎖。

Go效能強悍

與其他現代高階語言(如Java/Python)相比,使用C,C++的最大好處是它們的效能。因為C/ C++是編譯型語言而不是解釋的語言。 處理器只能理解二進位制檔案,Java和Python這種高階語言在執行的時候需要先將人類可讀的程式碼翻譯成位元組碼,然後由專門的直譯器再轉變成處理器可以理解的二進位制檔案。-w839同C,C++一樣,Go語言也是編譯型的語言,它直接將人類可讀的程式碼編譯成了處理器可以直接執行的二進位制檔案,執行效率更高,效能更好。-w1112資料來源:https://benchmarksgame-team.pages.debian.net/benchmarksgame/

可以看出,Go 語言在效能上更接近於 Java 語言,雖然在某些測試用例上不如經過多年優化的 Java 語言,但畢竟 Java 語言已經經歷了多年的積累和優化。Go 語言在未來的版本中會通過不斷的版本優化提高單核執行效能。

Go語言簡單易學

語法簡潔
Go 語言簡單易學,學習曲線平緩,不需要像 C/C++ 語言動輒需要兩到三年的學習期。Go 語言被稱為“網際網路時代的C語言”。Go 語言的風格類似於C語言。其語法在C語言的基礎上進行了大幅的簡化,去掉了不需要的表示式括號,迴圈也只有 for 一種表示方法,就可以實現數值、鍵值等各種遍歷。

程式碼風格統一
Go 語言提供了一套格式化工具——go fmt。一些 Go 語言的開發環境或者編輯器在儲存時,都會使用格式化工具進行修改程式碼的格式化,這樣就保證了不同開發者提交的程式碼都是統一的格式。(吐槽下:再也不用擔心那些看不懂的黑魔法了…)

開發效率高
Go語言實現了開發效率與執行效率的完美結合,讓你像寫Python程式碼(效率)一樣編寫C程式碼(效能)。

學習Go語言的前景

目前Go語言已經⼴泛應用於人工智慧、雲端計算開發、容器虛擬化、⼤資料開發、資料分析及科學計算、運維開發、爬蟲開發、遊戲開發等領域。

Go語言簡單易學,天生支援併發,完美契合當下高併發的網際網路生態。Go語言的崗位需求持續高漲,目前的Go程式設計師數量少,待遇好。

抓住趨勢,要學會做一個領跑者而不是跟隨者。

國內Go語言的需求潛力巨大,目前無論是國內大廠還是新興網際網路公司基本上都會有Go語言的崗位需求。

下圖是應用Go語言的公司舉例:

image-20190203135218456

除了上面列出的大廠外,很多小型公司或創業公司也開始使用Go語言,並且很多公司把Go語言作為其主要開發語言。

現在就開始你的Go語言學習之旅吧!人生苦短,let’s Go.