日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
為什么說(shuō)2017年你必須要學(xué)習(xí)Go了

為什么要學(xué)習(xí)Go

Go是未來(lái)的服務(wù)端語(yǔ)言—?Tobias Lütke, Shopify。在過(guò)去的幾年中,Golang逐步流行起來(lái)。 還有什么能比一門新語(yǔ)言讓碼農(nóng)們瘋狂呢? 因此,我開始學(xué)習(xí)了一段時(shí)間Golang,在這里我將告訴你為什么你也應(yīng)該學(xué)習(xí)這種新語(yǔ)言。 在本文里我不會(huì)告訴你怎么寫hello world。 我要分析計(jì)算機(jī)硬件軟件的當(dāng)前階段,以解釋為什么我們需要像Go這樣的新語(yǔ)言?

十多年的什邡網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。網(wǎng)絡(luò)營(yíng)銷推廣的優(yōu)勢(shì)是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整什邡建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無(wú)論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。創(chuàng)新互聯(lián)從事“什邡網(wǎng)站設(shè)計(jì)”,“什邡網(wǎng)站推廣”以來(lái),每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。

硬件限制

摩爾定律正在失效 ***個(gè)具有3.0GHz時(shí)鐘速度的Pentium 4處理器是由英特爾于2004年推出的。 而今天,我的Mackbook Pro 2016的CPU時(shí)鐘速度為2.9GHz。 可以看到在過(guò)去的十年中,CPU處理能力沒有太大的進(jìn)步。 您可以在下面的圖表中看到這一點(diǎn)。

從上面的圖表可以看出,單線程的性能和處理器的頻率在過(guò)去的十年內(nèi)保持平穩(wěn)。如果你認(rèn)為添加更多的晶體管是解決方案,那么你錯(cuò)了。這是因?yàn)樵谳^小的尺度上一些量子性質(zhì)開始出現(xiàn)(如隧道,因?yàn)樗鼘?shí)際上用掉更多的更多的晶體管(為什么?)并且添加晶體管的性價(jià)比在下降。 所以制造商開始向處理器添加越來(lái)越多的核心?,F(xiàn)在我們有四核和八核CPU可用。 同時(shí)我們還引入了超線程。還向處理器添加更多緩存以提高性能。 但上述解決方案也有其局限性。我們不能向處理器添加更多的緩存以提高性能,因?yàn)榫彺婢哂形锢硐拗疲壕彺嬖酱?,緩存越慢。向處理器添加更多核心也具有成本。此外,這都不能***擴(kuò)展。這些多核處理器可以同時(shí)運(yùn)行多個(gè)線程,并在紙面上帶來(lái)并發(fā)性。我們稍后將討論這一問(wèn)題。 所以,如果我們不能完全依靠硬件的改進(jìn)來(lái)提升性能,更高效的軟件也是我們需要考慮的手段。但遺憾的是,現(xiàn)代編程語(yǔ)言并不高效。

Go has goroutines!!

如上所述,硬件制造商正在向處理器添加越來(lái)越多的核心以提高性能。使用這些處理器的所有數(shù)據(jù)中心,在未來(lái)幾年內(nèi)核數(shù)量將會(huì)大大增加。更重要的是,今天的應(yīng)用程序使用多個(gè)微服務(wù)來(lái)維護(hù)數(shù)據(jù)庫(kù)連接,消息隊(duì)列和緩存。因此,我們開發(fā)的軟件和編程語(yǔ)言應(yīng)該輕松支持并發(fā)性,并且它們應(yīng)該隨著核心數(shù)量的增加而輕松擴(kuò)展。 但是,大多數(shù)現(xiàn)代編程語(yǔ)言(如Java,Python等)發(fā)明于90年代的單線程環(huán)境。當(dāng)然這并不意味著他們不支持多線程(譯者的話Python確實(shí)不支持多線程)。大多數(shù)編程語(yǔ)言支持多線程。真正的問(wèn)題來(lái)自并發(fā)執(zhí)行和線程鎖,競(jìng)爭(zhēng)條件和死鎖。這些東西使得在這些語(yǔ)言上創(chuàng)建多線程應(yīng)用程序很困難。 例如,在Java中創(chuàng)建新線程會(huì)消耗大約1MB的內(nèi)存堆大小。最終如果你創(chuàng)建了數(shù)千個(gè)線程,這將對(duì)堆內(nèi)存造成巨大的壓力,并將由于內(nèi)存不足而被操作系統(tǒng)殺死。此外,如果你想在兩個(gè)或多個(gè)線程之間進(jìn)行通信,也比較困難。 另一方面,Go在2009年發(fā)布時(shí),多核處理器已經(jīng)流行起來(lái)。這就是為什么GoLang以并發(fā)為***要?jiǎng)?wù)。 Go使用goroutines而不是線程。新建goroutine只使用近2KB的內(nèi)存,你可以創(chuàng)建數(shù)百萬(wàn)goroutine。

當(dāng)然還有其他的好處:

  • 具有可增長(zhǎng)的分段堆。這意味著他們只在需要時(shí)才使用更多的內(nèi)存。

  • Goroutines的啟動(dòng)時(shí)間比線程快。

  • Goroutines帶有內(nèi)置的原語(yǔ),以便在它們之間(channel)安全地通信。

  • Goroutines允許您避免在共享數(shù)據(jù)結(jié)構(gòu)時(shí)使用互斥鎖。

  • 此外,goroutines和OS線程不是1:1映射。 單個(gè)goroutine可以在多個(gè)線程上運(yùn)行。 Goroutine被復(fù)用到少量的OS線程中。

以上幾點(diǎn),使Go非常強(qiáng)大,可以在處理并發(fā)(如Java、C和C++)的同時(shí)保持代碼的優(yōu)雅(像Earlang)。

Go直接運(yùn)行在硬件上

使用C、C ++的一個(gè)***的好處是它們的性能比其他現(xiàn)代高級(jí)語(yǔ)言(如Java / Python)更強(qiáng)。 因?yàn)镃 / C ++是編譯執(zhí)行而不是解釋執(zhí)行的。 當(dāng)您使用Java或其他基于JVM的語(yǔ)言構(gòu)建應(yīng)用程序時(shí),它將代碼編譯為字節(jié)碼,在執(zhí)行時(shí),JVM解釋字節(jié)碼并將其轉(zhuǎn)換為處理器可以理解的二進(jìn)制代碼。

而C、C 不在VM上執(zhí)行,從執(zhí)行周期中刪除一個(gè)步驟,并提高了性能。 他們直接將代碼編譯成二進(jìn)制代碼。

但是在C/C中釋放和分配內(nèi)存太過(guò)痛苦。 即使大多數(shù)編程語(yǔ)言可以使用垃圾收集器或引用計(jì)數(shù)算法處理對(duì)象分配和刪除。 Go同時(shí)擁有上面提到的好處。 Go是像C/C++這樣的低級(jí)語(yǔ)言并且是編譯型語(yǔ)言。 這意味著它的性能幾乎更接近低級(jí)語(yǔ)言。 并且Go還使用垃圾回收來(lái)分配和釋放內(nèi)存。 所以不需要malloc和free?。?!

Go代碼容易維護(hù)

Go有著非常整潔和干凈的語(yǔ)法。Go的設(shè)計(jì)者在創(chuàng)建語(yǔ)言時(shí)考慮到了這一點(diǎn)。 由于google有非常大的代碼庫(kù),成千上萬(wàn)的開發(fā)人員正在使用同一個(gè)代碼庫(kù),代碼應(yīng)該易于其他開發(fā)人員理解。這將使代碼易于維護(hù)和修改。 Go故意去掉了很多現(xiàn)代OOP語(yǔ)言具有的功能。

  • 沒有類。 Go只有結(jié)構(gòu)體而不是類。

  • 不支持繼承。 這將使代碼容易修改。 在其他語(yǔ)言(如Java / Python)中,如果ABC類繼承了類XYZ,并且在類XYZ中進(jìn)行了一些更改,那么這可能會(huì)在繼承XYZ的其他類中產(chǎn)生一些副作用。 通過(guò)刪除繼承,Go使得很容易理解代碼(因?yàn)闆]有超類)。

  • 沒有構(gòu)造函數(shù)。

  • 無(wú)注解(annotation)。

  • 沒有泛型(generics)。

  • 沒有異常。

以上的差異使Go與其他語(yǔ)言非常不同。 當(dāng)然你可能不喜歡上面的一些點(diǎn)。 但是,在沒有上述功能的情況下 你需要做的僅僅是多寫2-3行代碼。 然而這樣會(huì)使你的代碼更加簡(jiǎn)潔易懂。

上圖顯示Go幾乎與C/C++一樣高效,同時(shí)保持代碼語(yǔ)法簡(jiǎn)單,如同Ruby,Python。 這是一個(gè)對(duì)人類和機(jī)器來(lái)說(shuō)雙贏的局面! 與其他新語(yǔ)言(像Swift)不同,Go的語(yǔ)法非常穩(wěn)定。 自從2012年***公開發(fā)布1.0版以來(lái),它保持不變。這使得它向下兼容。

Go的背后是Google

  • 雖然這不是直接的技術(shù)優(yōu)勢(shì)。 但Go是由Google設(shè)計(jì)和支持的。 Google擁有世界上***的云基礎(chǔ)架構(gòu)之一,并且可以大規(guī)模擴(kuò)展。Go是由Google設(shè)計(jì)的,以解決他們需要的可擴(kuò)展性性問(wèn)題。這些也是你在創(chuàng)建自己的服務(wù)時(shí)將面臨的問(wèn)題。

  • Go也被一些大公司使用,如Adobe,BBC,IBM,英特爾等等。

結(jié)論

  • 即使Go和其他面向?qū)ο蟮恼Z(yǔ)言非常不同,但它同時(shí)為您提供高性能(如C/C++),超級(jí)好用的并發(fā)處理(如Java)和簡(jiǎn)潔的代碼(如Python/Perl)。

  • 如果你沒有任何計(jì)劃學(xué)習(xí)Go,我還是會(huì)說(shuō)軟件開發(fā)人員需要寫出超高效的代碼。開發(fā)人員需要了解硬件并相應(yīng)地優(yōu)化程序。優(yōu)化軟件以運(yùn)行在更便宜和更慢的硬件(如IOT設(shè)備)以提升最終用戶體驗(yàn)。

相關(guān)鏈接

  • Go 的詳細(xì)介紹:點(diǎn)擊查看
  • Go 的下載地址: 點(diǎn)擊下載

網(wǎng)頁(yè)名稱:為什么說(shuō)2017年你必須要學(xué)習(xí)Go了
新聞來(lái)源:http://www.dlmjj.cn/article/cocdocs.html