iT邦幫忙

第 11 屆 iT 邦幫忙鐵人賽

DAY 2
1
Software Development

Golang入門到進階實戰系列 第 2

Day2 聊聊Go的歷史

為什麼需要一個新的語言

硬體限制 - 摩爾定律正在失效

Intel於2004年發佈了第一塊具有3.0GHz時脈速度的Pentium4處理器。目前最新一代Intel Core I9的時脈速度約為3.5-4.0GHz。可以見得在過去的十年裡,CPU的處理能力沒有太大的發展。
40 Years of Microprocessor Trend Data

从上图中可以看出,在过去十年间单线程的性能和处理器的速率保持稳定。倘若你把增加晶体管的数量作为解决方案,那么你错了。
因为在较小的尺度上开始出现一些量子特性(如:隧穿效应),这将导致放置更多晶体管实际上花费更多(为什么)并且增加晶体管的性价比在下降。

為了解決上述的問題,制造商開始往橫向發展,替處理器添加越來越多的核心,現在你可以找到四核和八核CPU的產品。
我們同時引進了超線程、向處理器添加更多緩存以提高性能,但是此類的解決方向也存在其局限性,我們並不能通過增加更昌的緩存到處理器來提高其性能,因為緩存本身的物理特性限制:緩存越多,它就越慢。而增加處理器的核心同時也有一些問題,首先是核心也不可能無限縮小,接著是多核處理器雖然可以同時執行多線程,但也引發了處理器的平行運算問題。

如果我們不能依賴硬體去發展,剩下的出路就是從更高效的軟體來作為提升性能的落腳點了。但很遺憾,現代的計算機語言的效率普遍都不高。

「The modern processor is like a modified car with a hair-trigger, quarter-mile acceleration that excels. Unfortunately, modern programming languages are like the F1 circuit in monte carlo。」 --- David Ungar

聊聊程式語言

對程式語言來說,並發程度和系統效率在多數情況下無法兼得,要嘛運行效率高,但低效的並發和編釋,如C++,要麼執行低效,但能有效的編釋,如.NET、Java.

go出现之前,无论汇编语言、还是动态脚本语言,在执行效率和开发效率上都不能兼备。
開發過程中相較於 Java 和 C++呆滯的編譯速度,Go 的快速編譯時間是一個主要的效率優勢。Go擁有接近C的運行效率和接近PHP的開發效率。

運行效率 execution speed: C/C++ > Java > PHP
開發效率 developing efficiency: PHP > Java > C/C++

https://miro.medium.com/max/2020/1*_20V0btS4zHUCrX9BPnGhA.png

Go的設計為了解決當時Googld開發遇到的各種問題,包括:大量的C++代碼,同時又引入了Java和Python,成千上萬的工程師,行數以萬計的代碼,分布式的編釋系統,還有數百萬台的伺服器。

Go捨棄了現在OOP類型語言的很多特性,為了讓程式開發更加簡潔與高效。

  • 無類的存在。Go只有Struct。无类。所有事物都被划分到包中。Go 中只有结构体,它取代了类。
  • 不支持繼承,這使得代碼易於追蹤與修改。
  • 沒有構造方法
  • 沒有注解
  • 沒有泛型
  • 沒有異常

至此介紹完Golang的發展歷史,與Go的語言特性,大家應該對於Golang的設計理念,解決方案的目標都有清楚的概念了。
明天開始會進入Golang學習的正題,從環境建置開始。


上一篇
Golang旅程開始
下一篇
Day3 環境建置
系列文
Golang入門到進階實戰30

尚未有邦友留言

立即登入留言