終於等到你!go語言——讓你用寫php**的開發效率編寫c語言**。
為什麼網際網路世界需要go語言
世界上已經有太多太多的程式語言了,為什麼又出來乙個go語言?
硬體限制:摩爾定律已然失效
摩爾定律:當**不變時,積體電路上可容納的元器件的數目,約每隔18-24個月便會增加一倍,效能也將提公升一倍。 換言之,每一美元所能買到的電腦效能,將每隔18-24個月翻一倍以上。
從上面的圖表可以看出,近十年單執行緒效能和處理器頻率保持穩定。我們不能像之前一樣把新增更多電晶體當成是解決方案,因為在較小規模上一些量子特性開始出現(如隧道效應),並且因為在同樣小的空間裡放置更多電晶體的代價非常昂貴,每1美元可以新增的電晶體數量開始下降。
製造商開始從其他方面提高處理器的效能:
向處理器新增越來越多的核心,如四核和八核cpu。
發明了超執行緒技術。
為處理器新增了更多快取以提高效能。
但上述解決方案也有其自身的侷限性。因為成本原因我們不能無限制的為計算機新增核心,也無法無限制的新增快取來提高效能,因為快取越大,取值的效能越低。
我們沒有辦法在硬體上一直取得突破,我們需要提高軟體的效能或者說我們需要高效能的軟體。
go語言為併發而生
如上所述,硬體製造商正在為處理器新增越來越多的核心以提高效能。所有資料中心都在這些處理器上執行,更重要的是,今天的應用程式使用多個微服務來維護資料庫連線,訊息佇列和維護快取。因此,開發的軟體和程式語言應該可以輕鬆地支援併發性,並且應該能夠隨著cpu核心數量的增加而可擴充套件。
但是,大多數現代程式語言(如j**a,python等)都來自90年代的單執行緒環境。雖然一些程式語言的框架在不斷地提高多核資源使用效率,例如 j**a 的 netty 等,但仍然需要開發人員花費大量的時間和精力搞懂這些框架的執行原理後才能熟練掌握。
go於2023年發布,當時多核處理器已經上市。go語言在多核併發上擁有原生的設計優勢,go語言從底層原生支援併發,無須第三方庫、開發者的程式設計技巧和開發經驗。
很多公司,特別是中國的網際網路公司,即將或者已經完成了使用 go 語言改造舊系統的過程。經過 go 語言重構的系統能使用更少的硬體資源獲得更高的併發和i/o吞吐表現。充分挖掘硬體裝置的潛力也滿足當前精細化運營的市場大環境。
go語言的併發是基於 goroutine 的,goroutine 類似於執行緒,但並非執行緒。可以將 goroutine 理解為一種虛擬執行緒。go 語言執行時會參與排程 goroutine,並將 goroutine 合理地分配到每個 cpu 中,最大限度地使用cpu效能。開啟乙個goroutine的消耗非常小(大約2kb的記憶體),你可以輕鬆建立數百萬個goroutine。
goroutine的特點:
goroutine具有可增長的分段堆疊。這意味著它們只在需要時才會使用更多記憶體。
goroutine的啟動時間比執行緒快。
goroutine原生支援利用channel安全地進行通訊。
goroutine共享資料結構時無需使用互斥鎖。
go效能強悍
可以看出,go 語言在效能上更接近於 j**a 語言,雖然在某些測試用例上不如經過多年優化的 j**a 語言,但畢竟 j**a 語言已經經歷了多年的積累和優化。go 語言在未來的版本中會通過不斷的版本優化提高單核執行效能。
為什麼要用GO語言
go語言用途 go語言被設計成為一門應用於搭載web伺服器,儲存集群或類似用途的巨型 伺服器的系統程式語言。對於高效能分布式系統領域而言,go語言無疑比大多數其他語言有著更高的開發效率。它提供了海量並行的支援,這對於遊戲服務端的開發而言是再好不過。第乙個go程式 接下來我們來編寫第乙個go程式hel...
為什麼會設計Go語言
當初他們為什麼會有設計乙個新語言的衝動呢?讓我們一起來回顧一下這些歷史,也許很多人對他們當年遇到的問題感同身受。設計go語言是為了解決當時google開發遇到的以下這些問題 其主要有以下幾個方面的痛點 所以,他們當時設計go的目標是為了消除各種緩慢和笨重 改進各種低效和擴充套件性。go是由那些開發大...
我為什麼喜歡Go語言
從2000年至今,也寫了11年 了,期間用過vb delphi c c ruby python,一直在尋找一門符合自己心意和理念的 語言。我很在意寫 時的手感和執行的效率,所以在go出現之前一直沒有找到。在熟悉go之後,我雖沒有停下腳步,也去體驗了d語言,但幾乎立即就放棄 了,它的設計還是太複雜。就...