尋夢新聞LINE@每日推播熱門推薦文章,趣聞不漏接❤️
「Go將成為未來的服務器語言。」 – Tobias Lütke, Shopify
在過去幾年中,新的編程語言有所增加:Go或GoLang。 沒有什麼能讓開發人員瘋狂而不是新的編程語言,對嗎? 所以,我開始學習4到5個月前的Go,在這里,我將告訴你為什麼你也應該學習這門新語言。我要解釋現階段的計算機硬件 – 軟件以及為什麼我們需要像Go這樣的新語言? 因為如果沒有任何問題,那麼我們不需要解決方案吧?
硬件限制:
摩爾定律涼涼了。
英特爾於2004年推出了第一款具有3.0GHz時鐘速度的奔騰4處理器。 今天,我的Mackbook Pro 2016的時鐘速度為2.9GHz。 因此,差不多十年,原始處理能力沒有太大的提升。 您可以在下圖中看到增加處理能力與時間的比較。
那麼,對於上述問題的解決方案,製造商開始向處理器添加越來越多的內核。如今我們有四核和八核CPU可用。
我們還介紹了超線程。為處理器添加了更多緩存以提高性能。
但上述解決方案也有其自身的局限性。我們無法向處理器添加越來越多的緩存以提高性能,因為緩存具有物理限制:緩存越大,獲得的速度越慢。為處理器添加更多核心也有其成本。而且,這無法無限擴展。這些多核處理器可以同時運行多個線程,從而為圖像帶來並發性。
因此,如果我們不能依賴硬件改進,唯一的出路就是提高性能的軟件。但遺憾的是,現代編程語言效率不高。
Go有goroutines !!
如上所述,硬件製造商正在為處理器添加越來越多的內核以提高性能。 所有數據中心都在這些處理器上運行,我們預計未來幾年核心數量會增加。 更重要的是,今天的應用程序使用多個微服務來維護數據庫連接,消息隊列和維護緩存。 因此,我們開發的軟件和編程語言應該可以輕鬆地支持並發性,並且它們應該隨著核心數量的增加而可擴展。
但是,大多數現代編程語言(如Java,Python等)都來自90年代的單線程環境。 大多數編程語言都支持多線程。 但真正的問題是並發執行,線程鎖定,競爭條件和死鎖。 這些事情使得很難在這些語言上創建多線程應用程序。
例如,在Java中創建新線程不是內存有效的。 由於每個線程消耗大約1MB的內存堆大小,並且最終如果你開始旋轉數千個線程,它們將對堆施加巨大壓力並導致由於內存不足而導致關閉。 此外,如果要在兩個或多個線程之間進行通信,則非常困難。
另一方面,Go於2009年發布,當時多核處理器已經上市。 這就是為什麼Go是在保持並發性的基礎上構建的。 Go有goroutines而不是線程。 它們從堆中消耗了大約2KB的內存。 因此,您可以隨時旋轉數百萬個goroutine。
其他好處是:
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沒有像其他語言那樣瘋狂的編程語法。它的語法非常整潔。
GoogleGo的設計者在創建語言時就考慮到了這一點。由於Google擁有非常龐大的代碼庫,成千上萬的開發人員正在開發相同的代碼庫,因此對於其他開發人員來說代碼應該很容易理解,而代碼的一段代碼應該對代碼的另一部分產生最小的副作用。這將使代碼易於維護且易於修改。
以上更改使Go與其他語言有很大不同,它使Go中的編程與其他語言不同。 你可能不喜歡上面的一些觀點。 但是,如果沒有上述功能,您就無法對應用程序進行編碼。 您所要做的就是再寫2-3行。 但從積極的方面來說,它將使您的代碼更清晰,並為您的代碼增加更多清晰度。
Go由Google支持作為後盾
我知道這不是直接的技術優勢。 但是,Go是由Google設計和支持的。 Google擁有世界上最大的雲基礎設施之一,並且規模龐大。 Go由Google設計,旨在解決支持可擴展性和有效性的問題。 這些是您在創建自己的服務器時將面臨的相同問題。
更多的是Go也被一些大公司使用,如Adobe,BBC,IBM,Intel。
結論:
盡管Go與其他面向對象的語言非常不同,但它仍然是同一個野獸。 Go為您提供高性能,如C / C ++,超高效的並發處理,如Java,以及Python / Perl等代碼的樂趣。
如果你沒有任何學習Go的計劃,我仍然會說硬件限制會給我們帶來壓力,軟件開發人員要編寫超高效的代碼。 開發人員需要了解硬件並相應地優化其程序。 優化的軟件可以在更便宜和更慢的硬件(如物聯網設備)上運行,並且對整體用戶體驗的整體影響更大。
碼代碼不如DIY人工智能,那麼Google AIY是什麼?
AIY是由Google創建的DIY(自己動手)和AI(人工智能)的組合。 而這些關鍵字基本上就已經準確地告訴了你這些工具包的用途:自己動手做人工智能。 Google AIY目前提供兩種不同的套件。
據報導,Google AIY系列開發套件已經抵港銷售了,價格分別是港幣706和港幣392。感興趣的開發者們,可以關注Google AIY系列開發套件的香港線上商城——引力互聯GravitylinkStore。 用戶可以提供自己的應用程序,甚至可以使用Google的TensorFlow機器學習軟件訓練他們的模型,使其更加有效。