av激情亚洲男人的天堂国语,日韩欧美精品一中文字幕,无码av一区二区三区无码,国产又色又爽又刺激的a片,国产又色又爽又刺激的a片

核心代碼從Python換成Go語言,提速30倍!

Stream公司最近將其核心服務的后端從Python切換成了Go,雖然他們內(nèi)部還在使用Python,但是公司已經(jīng)決定從現(xiàn)在開始在Go中編寫所有性能密集型代碼。本文,Stream***執(zhí)行官和創(chuàng)始人Thierry Schellenbach解釋了公司的這一決定。

目前創(chuàng)新互聯(lián)已為1000多家的企業(yè)提供了網(wǎng)站建設、域名、網(wǎng)絡空間、網(wǎng)站托管維護、企業(yè)網(wǎng)站設計、鐵門關(guān)網(wǎng)站維護等服務,公司將堅持客戶導向、應用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。

選擇項目或產(chǎn)品的編程語言會受到許多因素驅(qū)動,與所有技術(shù)決策一樣,沒有***的答案足以解決所有問題。Stream之所以這么做,是因為感受到了Go語言的巨大好處。

這與Stream的產(chǎn)品有關(guān)。Stream是用于構(gòu)建,縮放、個性化新聞源和活動流的API。每月為3億多用戶提供約10億次API請求。因此,性能和可靠性是Stream制定每項技術(shù)決策的最重要原因。

Python和GO:性能對比!

Go***的賣點可能就是性能,無論是運行時間還是編譯時間。它在大多數(shù)計算基準測試中與Java或C ++相當。在Stream的實際使用中,GO比Python快大約30倍。

選擇性能優(yōu)秀的工具非常重要(Stream已經(jīng)優(yōu)化了Cassandra,PostgreSQL,Redis和許多其他技術(shù))。然而,有時發(fā)現(xiàn)系統(tǒng)中的瓶頸確實是Python引起的,像序列化,排序和聚合等計算繁重的任務有時會比從網(wǎng)絡數(shù)據(jù)存儲檢索數(shù)據(jù)花費更長的時間。

Go編譯器(本身是用Go編寫的)也非???。使用Go編寫的Stream中最復雜的微服務只需要6秒即可編譯完成,與Java和C ++等工具鏈相比,這是一個重大勝利。

此外,閱讀Go語言代碼往往非常簡單,GO干凈的風格讓讀取和推理更容易。

本地并發(fā)

通過goroutines和channel將并發(fā)性融入到語言中。Goroutines在概念上類似于操作系統(tǒng)線程,但非常便宜——每個成本只有幾KB的堆??臻g。Go運行時可以處理智能多路復用goroutines,這一切對程序員來說是透明的。單個程序擁有數(shù)千個goroutines并不罕見。例如,net / http軟件包中的服務器為每個傳入的HTTP請求創(chuàng)建一個goroutine。

在真正的Go語言中,goroutine非常簡單:只需在“go”關(guān)鍵字前添加一個函數(shù)調(diào)用,讓它運行在自己的goroutine中即可。

Go世界的傳統(tǒng)觀點是“不通過共享內(nèi)存來交流,相反的是,通過通信來共享內(nèi)存“。在goroutines之間進行通信的原語是channel,它們與goroutines一樣易于使用。channel有一個類型,可以通過直觀的箭頭語法輕松地在goroutine之間傳遞數(shù)據(jù)。雖然簡單,但channel非常強大。通過預先考慮,與傳統(tǒng)系統(tǒng)相比,制作大規(guī)模并發(fā)系統(tǒng)是一件輕而易舉的事情。

使用簡單的并發(fā)工具,可以解決那些經(jīng)常導致錯誤的復雜問題。Go隨附內(nèi)置競速檢測器,可以更輕松檢測異步代碼中的競爭狀態(tài)。

生態(tài)系統(tǒng)

Go仍然是編譯語言環(huán)境的新手,遠比不上C ++和Java等傳統(tǒng)語言的普及程度。雖然只有大約5%的程序員知道Go,但是這個數(shù)字還在不斷增長,而且這種增長是由于語言的易用性所致。雖然語言快速且功能強大,但該語言只有25個保留字(與C ++ 92或Java 53相比),對于大多數(shù)開發(fā)人員來說,它只會引入很少的新概念。

建立一個Go開發(fā)團隊比大多數(shù)語言更容易,因為它更容易學習。

隨Go提供的內(nèi)置庫在開箱即用,功能強大。使用`net / http`包制作HTTP服務只需要幾行代碼,并且本地支持http / 2,TLS和websocket等。社區(qū)軟件包的生態(tài)系統(tǒng)也很出色,適用于Redis,RabbitMQ,PostgreSQL和RocksDB等。

其他福利

Go節(jié)省時間的另一種方式是使用Gofmt。它是一個命令行工具,可與大多數(shù)編輯器集成并自動將代碼格式化為事實標準。如果格式不正確,代碼仍會編譯,但除非通過gofmt運行代碼以保持整個代碼庫格式一致,否則將不會查看pull請求。這使代碼審查人員能夠?qū)W⒂诖a而不是花時間挑剔格式。

Go有助于開發(fā)微服務架構(gòu),gRPC和Google的協(xié)議緩沖區(qū)是管理微服務之間通信的好方法,Go有***的支持。

Python與Go

Stream服務中的一個強大功能是排名提要。排名提要允許用戶為提要指定一個評分函數(shù),以便控制提取時的排序方式。評分算法可以提供很多變量來確定排名,但基于流行度的一個很好的例子可能是這樣的:

  1. 要支持這種排名方法,Python和Go代碼都需要:解析分數(shù)的表達式。在這種情況下,我們想將字符串“simple_gauss(time)* popular”變成一個函數(shù),它將一個活動作為輸入并返回一個分數(shù)作為輸出。
  2. 根據(jù)JSON配置創(chuàng)建部分函數(shù)。例如,我們希望“simple_gauss”以五天的刻度,一天的偏移量和0.3的衰減因子來調(diào)用“decay_gauss”。
  3. 如果在活動中沒有定義某個字段,則應對“默認值”配置進行壓縮,以便進行回退。
  4. 使用步驟1中的功能對Feed中的所有活動進行評分。

開發(fā)Python版本的示例花了大約三天的時間編寫代碼,單元測試和文檔。接下來,團隊花了大約兩周的時間來優(yōu)化代碼。其中一項優(yōu)化是將分數(shù)表達式(simple_gauss(time)* popular)轉(zhuǎn)換為抽象語法樹。該團隊還實施了高速緩存邏輯,預先計算了將來某些時間的分數(shù)。

相比之下,開發(fā)此代碼的Go版本需要大約四天的時間,并且性能不需要任何進一步的優(yōu)化。雖然Python的開發(fā)初期看來更快,但Go版本最終需要的工作量大大減少。

在優(yōu)化代碼庫時節(jié)省的時間歸功于Go語言的特點。使用Python,程序員不得不將表達式解析為抽象語法樹,并優(yōu)化/剖析通過排名公開的每個函數(shù)。

結(jié)論

Go是編寫微服務的偉大語言。它的速度非??欤哂性l(fā)原語,對現(xiàn)有工具的卓越支持,并且開發(fā)起來非常有趣。與Ruby或Python等腳本語言相比,Go語言可能需要更長的時間,但維護成本要低得多,而且將節(jié)省大量時間優(yōu)化代碼。

重要的是,Stream仍然在使用Python,它是有意義的。例如,儀表板,網(wǎng)站和個性化訂閱源的機器學習使用Python,因為工具更好。Stream不會馬上告別Python,但是今后會在Go中編寫所有性能密集型代碼。


本文標題:核心代碼從Python換成Go語言,提速30倍!
標題鏈接:http://uogjgqi.cn/article/djccgso.html
掃二維碼與項目經(jīng)理溝通

我們在微信上24小時期待你的聲音

解答本文疑問/技術(shù)咨詢/運營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流