在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何客觀評價 Go 語言

Linux愛好者 ? 來源:工程師李察 ? 2019-04-25 14:18 ? 次閱讀

我是從 2015 年開始接觸 Golang,并在之后開始在某出行公司的線上環(huán)境大規(guī)模使用,同時個人還利用個人時間深入研究過 Golang 的底層實(shí)現(xiàn)機(jī)制,包括內(nèi)存管理、GC 機(jī)制、Runtime Scheduler、Interface、Channel 等。這篇文章力求客觀的討論一下 Golang 的利弊。

優(yōu)點(diǎn)

1. 簡單

簡單應(yīng)該是 Golang 最大的優(yōu)勢。Golang 的語言特性簡單,學(xué)習(xí)周期短,熟悉其他編程語言的開發(fā)者基本都可以在短時間學(xué)會并寫出各方面都還不錯的代碼。所謂各方面都還不錯是說新手開發(fā)者寫出來的代碼和一些有經(jīng)驗的開發(fā)者寫出來的代碼差別并不會太大。

Golang 語言層面上的簡潔性讓一些新手程序員也能寫出性能不錯,bug 不多的程序,這個相比其他高級語言,比如 C++,是一個非常大的提升。MIT 的一個非常有名的課程 6.824 最開始使用功能的 C++,后來改成了 Golang,就是為了讓大家可以專注于分布式算法本身,而不是陷入到語言細(xì)節(jié)的調(diào)試當(dāng)中去。

2.兼顧開發(fā)效率和性能

Golang 由于豐富的原生庫和周邊生態(tài)的支持,開發(fā)效率甚至可以比肩 Python。很多公司早期,或者項目早期的時候為了趕開發(fā)進(jìn)度都會將開發(fā)效率放在第一位,比如 Python,PHP 這種動態(tài)語言。但是動態(tài)語言的性能劣勢非常明顯?,F(xiàn)在的一個好現(xiàn)象就是 Golang 已經(jīng)越來越多的被小公司采用了,畢竟寫一個 http server 不過三行代碼。

另外在開發(fā)效率的前提下,Golang 還具有非常高的性能。這一方面得益于靜態(tài)語言,另一方面和其本身的語言設(shè)計也有很多關(guān)系。但是這里說的非常高的性能有點(diǎn)不太嚴(yán)謹(jǐn),相比 C++/Java 這種老牌的高級語言,在某些場景下的 benchmark 還是要略遜一籌的。

3. 語言級別的特性支持

所謂語言級別的并發(fā)支持,就是使用 go func 直接啟動一個 goroutine,外加 select/chan 等周邊。在沒有語言級別的支持之前的異步編程簡直就是 callback 噩夢。記得云風(fēng)大神之前對 Golang 的一段評價:

我發(fā)現(xiàn)我花了四年時間錘煉自己用 C 語言構(gòu)建系統(tǒng)的能力,試圖找到一個規(guī)范,可以更好的編寫軟件。結(jié)果發(fā)現(xiàn)只是對 Go 的模仿。缺乏語言層面的支持,只能是一個拙劣的模仿?!?云風(fēng)

現(xiàn)在很多人使用一門新語言的時候,有時候還會問:“有對應(yīng)的 coroutine 庫嗎?” Golang 的語言層面的支持極大的解放了開發(fā)者的心智負(fù)擔(dān)。

缺點(diǎn)

1. runtime

支持 runtime 的編程語言一個無法繞開的問題就是 runtime 帶來的一系列問題,比如性能損耗。在 rust 語言介紹自己的優(yōu)勢的時候有一點(diǎn)就是 no runtime。

Golang 的線程模型調(diào)度是 M:N,runtime 調(diào)度模型是 GMP 模型,偽搶占式的。簡單點(diǎn)來說就是 runtime scheduler 可以類比成操作系統(tǒng),但是缺乏硬件層面上對操作系統(tǒng)的支持,比如硬件中斷,這就對 sheduler 的設(shè)計要求的非常高,但是 Golang 的實(shí)現(xiàn)并沒有想象中的那么好。

2.并不能做到真正高并發(fā)高性能

Golang 的高并發(fā)使用原生庫來實(shí)現(xiàn)的話一般都是通過多 goroutine + select/channel,但是我們看 channel 源碼,發(fā)現(xiàn)這個東西就是一個隊列+一把鎖。這也就意味著無法避免多個 goroutine 帶來的競爭問題。我之前測試過在多個 goroutine 競爭同一個 channel 的時候,性能急劇下降。所以很多高性能的高并發(fā)程序如果是用 Golang 來寫,很多都會避免使用 channel 來傳遞數(shù)據(jù),而是借用類似 disruptor 的 ringbuffer 技術(shù)。

但是這并不是說 Golang 在高并發(fā)場景下性能不行,對于日常的 io 密集型的 web server,可以說性能是足夠了。

其他

這里談一下 Golang 自問世以來一直被詬病的幾個問題。

1. GC

大概從 1.0 版本以來,GC 就一直被詬病。值得欣慰的是,Golang 的 GC 一直在發(fā)展,基本在每個版本都有一定的改進(jìn)。1.8 版本是 GC 的一個里程碑,使用并發(fā)三色標(biāo)記法的 GC 算法的stw 時間甚至達(dá)到了微秒級。目前社區(qū)貌似在討論分代 GC 的方案,這個后面專門寫一篇文章細(xì)說。

2. 包管理

包管理也是一直被詬病,主要是一直沒有一個官方的解決方案。直到去年官方終于開始有行動了,推出了 module,相對來說還是一個很不錯的方案。

3.泛型

Golang 沒有支持泛型的很大一個原因是泛型太復(fù)雜。盡管很多人說 interface 也能實(shí)現(xiàn)泛型功能,但是這個泛型還是有一些本質(zhì)的區(qū)別的。沒有泛型確實(shí)是一個減分項。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 源碼
    +關(guān)注

    關(guān)注

    8

    文章

    651

    瀏覽量

    29348
  • 效率
    +關(guān)注

    關(guān)注

    0

    文章

    149

    瀏覽量

    20081
  • 性能
    +關(guān)注

    關(guān)注

    0

    文章

    271

    瀏覽量

    19014

原文標(biāo)題:如何客觀評價 Go 語言?

文章出處:【微信號:LinuxHub,微信公眾號:Linux愛好者】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    Go語言簡介和安裝方法

    Go 又稱 Golang ,是 Google 的 Robert Griesemer,Rob Pike 及 Ken Thompson 開發(fā)的一種靜態(tài)強(qiáng)類型、編譯型語言。Go 語言語法與
    發(fā)表于 07-19 16:33 ?576次閱讀

    Go語言中的整數(shù)類型

    Go 語言中,整型可以細(xì)分成兩個種類十個類型。
    發(fā)表于 07-20 15:25 ?942次閱讀

    音頻質(zhì)量客觀評價中同步方法的研究與實(shí)現(xiàn)

    在音頻質(zhì)量客觀評價,尤其是音頻系統(tǒng)的在線評測時,參考信號與測試信號不可避免地存在系統(tǒng)延遲。計算參考與測試之間的延遲誤差從而實(shí)現(xiàn)信號之間的時間同步將是影響音頻質(zhì)量客觀評價結(jié)果的關(guān)鍵性問題
    發(fā)表于 03-12 00:24

    go語言能做什么工作?

    Go語言主要用作服務(wù)器端開發(fā),其定位是用來開發(fā)“大型軟件”的,適合于很多程序員一起開發(fā)大型軟件,并且開發(fā)周期長,支持云計算的網(wǎng)絡(luò)服務(wù)。Go語言能夠讓程序員快速開發(fā),并且在軟件不斷的增長
    發(fā)表于 03-22 15:03

    Go開發(fā)語言的優(yōu)勢在哪里?

    Go語言是谷歌發(fā)布的第二款開源編程語言,可以在不損失應(yīng)用程序性能的情況下降低代碼的復(fù)雜性,并專門針對多處理器系統(tǒng)應(yīng)用程序的編程進(jìn)行了優(yōu)化,開發(fā)速度極快,可以與C或C++媲美,而且更加安全、支持并行
    發(fā)表于 03-22 15:04

    基于視覺信息保真度的圖像增強(qiáng)質(zhì)量客觀評價方法_華東

    基于視覺信息保真度的圖像增強(qiáng)質(zhì)量客觀評價方法_華東
    發(fā)表于 03-16 09:15 ?0次下載

    一種新的HDR圖像客觀質(zhì)量評價方法

    針對當(dāng)前高動態(tài)范圍( HDR)圖像質(zhì)量評價方法未考慮圖像色度和結(jié)構(gòu)信息的問題,提出了一種新的HDR圖像客觀質(zhì)量評價方法。首先,利用HDR-VDP-2.2中的基于視覺感知的模型得到關(guān)于亮度與對比度
    發(fā)表于 12-05 18:58 ?3次下載
    一種新的HDR圖像<b class='flag-5'>客觀</b>質(zhì)量<b class='flag-5'>評價</b>方法

    網(wǎng)易有道CEO周楓推薦Go語言并介紹Go語言的3個優(yōu)點(diǎn)

    網(wǎng)易有道CEO周楓推薦Go語言。他認(rèn)為Go很好地繼承了C語言靈活、簡單有效的思想;Go有很高的生產(chǎn)效率;
    的頭像 發(fā)表于 01-31 14:11 ?5230次閱讀

    Go語言在世界各地的使用情況如何?

    【導(dǎo)讀】Go語言在世界各地的使用情況如何?數(shù)據(jù)說話,帶你直觀感受什么叫“酷小孩都用的語言”! JetBrains 官方博客發(fā)表了一篇題為"The state of Go"的文章,他們通
    的頭像 發(fā)表于 02-26 14:10 ?4119次閱讀
    <b class='flag-5'>Go</b><b class='flag-5'>語言</b>在世界各地的使用情況如何?

    詳解GO語言的趨勢與使用情況

    Go 語言簡單易學(xué)、性能優(yōu)良。JetBrains Blog 發(fā)布了Go 語言的調(diào)查報告,看看GO 語言
    的頭像 發(fā)表于 03-17 11:05 ?3069次閱讀

    Go語言憑借什么成為云原生第一語言的?

    偶然看到有人說, Go 語言目前的火爆可能就是曇花一現(xiàn)而已。這個觀點(diǎn)我當(dāng)然是不認(rèn)同的。 近幾年,關(guān)于 Go 與 Java 還有 C 的對比和討論愈演愈烈,但不可否認(rèn)的是,在十年多的時間里,Go
    的頭像 發(fā)表于 04-22 10:15 ?3210次閱讀
    <b class='flag-5'>Go</b><b class='flag-5'>語言</b>憑借什么成為云原生第一<b class='flag-5'>語言</b>的?

    數(shù)字音頻質(zhì)量主觀評價客觀評價并存的局面

    鑒于數(shù)字音頻質(zhì)量主觀評價的局限性,數(shù)字音頻質(zhì)量的客觀評價呼乎之欲出,形成主觀評價客觀評價并存的
    的頭像 發(fā)表于 06-17 15:11 ?2911次閱讀

    go語言枚舉類型怎么用

    go 語言枚舉類型是這么用的?在什么場景下會用到枚舉?本文對 go 語言枚舉做了詳細(xì)講解。 枚舉,是一種重要的數(shù)據(jù)類型,由一組鍵值對組成,通常用來在編程
    的頭像 發(fā)表于 09-02 09:43 ?5213次閱讀

    帶你了解go語言中的閉包

    ? 【 導(dǎo)讀】什么是閉包? 什么場景下會用閉包 ? 本文對 go 語言中的閉包做了詳細(xì)介紹。 閉包是由函數(shù)及其相關(guān)引用環(huán)境組合而成的實(shí)體(即:閉包=函數(shù)+引用環(huán)境)。 Go中的閉包 閉包是函數(shù)式
    的頭像 發(fā)表于 11-02 15:27 ?2477次閱讀

    go語言中怎么使用HTTP代理

    go語言中怎么使用HTTP代理。
    的頭像 發(fā)表于 09-01 14:41 ?2447次閱讀
    主站蜘蛛池模板: 天天操天天干天天摸| 视频一区二区不卡| 全国男人的天堂网站| 亚洲一区二区中文字5566| 天天干夜夜操美女| 亚洲国产tv| 手机在线看| 免费一级毛片正在播放| 狠狠干网| 成人最新午夜免费视频| 无码一区二区三区视频| 夜夜夜夜夜夜夜工噜噜噜| 夜性影院| 久久澡| 91拍拍在线观看| 国产成人一级片| 婷婷亚洲五月琪琪综合| 人人干人人干人人干| 一级特黄a 大片免费| 毛片免费看网站| 三级全黄a| 日本特级淫片免费看| 性欧美精品久久久久久久| 色吧在线视频在线观看| 国产精品一久久香蕉产线看| 日本一区二区三区视频在线| 国产毛片久久国产| 婷婷激情亚洲| 网www天堂资源在线| 日韩一级特黄毛片在线看| 手机在线观看毛片| 亚洲第一毛片| 日本免费人成在线网站| 国产一级真人毛爱做毛片| 夜夜爱夜夜爽| 国产精品福利一区| 日本亚洲在线| 色天使在线播放| 欧美日韩一区二区视频图片| 国产三级在线观看免费| 天天爱夜夜|