成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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

開發 后端
Stream公司最近將其核心服務的后端從Python切換成了Go,雖然他們內部還在使用Python,但是公司已經決定從現在開始在Go中編寫所有性能密集型代碼。本文,Stream首席執行官和創始人Thierry Schellenbach解釋了公司的這一決定。
[[224146]]

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

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

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

Python和GO:性能對比!

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

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

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

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

本地并發

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

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

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

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

生態系統

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

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

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

其他福利

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

Go有助于開發微服務架構,gRPC和Google的協議緩沖區是管理微服務之間通信的好方法,Go有***的支持。

Python與Go

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

 

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

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

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

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

結論

Go是編寫微服務的偉大語言。它的速度非常快,具有原生并發原語,對現有工具的卓越支持,并且開發起來非常有趣。與Ruby或Python等腳本語言相比,Go語言可能需要更長的時間,但維護成本要低得多,而且將節省大量時間優化代碼。

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

責任編輯:未麗燕 來源: 程序師
相關推薦

2023-05-04 15:32:51

編程開發

2024-12-04 10:19:49

2022-08-09 09:10:31

TaichiPython

2020-04-20 11:09:18

Python開發語言

2021-05-17 09:57:42

Python 開發編程語言

2021-02-17 13:20:51

forpandas語言

2021-03-04 09:25:08

Go語言惡意軟件黑客

2020-01-14 15:03:27

Python代碼編程語言

2020-05-01 12:35:31

C++Python編程

2023-10-11 06:59:48

Go語言切片

2016-10-08 16:02:37

WIFIMegaMIMO系統

2013-02-28 10:35:59

hadoop大數據Hortonworks

2016-03-21 10:16:06

RedisSpark大數據處理

2023-12-11 15:40:32

PyTorch代碼大模型

2016-05-26 17:33:31

華為,云計算,數據中心

2024-08-12 12:27:03

2017-08-31 13:50:53

Python編程語言

2018-07-27 09:32:18

Python代碼數據

2013-09-24 09:40:41

Java圖形加速

2021-01-06 09:47:51

內存Go語言
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 91亚洲精选| 欧美 日韩 亚洲91麻豆精品 | 亚洲高清在线免费观看 | 中国av在线免费观看 | 在线国产一区二区三区 | 日韩精品免费一区二区在线观看 | 久久天堂 | 午夜视频在线观看一区二区 | 欧美 日韩 中文 | 精品国产青草久久久久福利 | 国产精品久久久久久久久久久久 | 不卡一区二区在线观看 | 成人免费在线视频 | 国产精品久久久久久久久久久免费看 | 精品综合久久久 | 欧美精品一区二区三区在线 | 欧美亚洲另类丝袜综合网动图 | 超碰97人人人人人蜜桃 | 天天插天天射天天干 | 日韩伦理一区二区 | 国产欧美一区二区在线观看 | 在线观看精品 | 一区二区三区四区在线视频 | 亚洲精品区 | 亚洲二区在线观看 | 精品在线一区二区三区 | 精品福利一区二区三区 | 日本三级电影在线观看视频 | 青青草av网站 | 中文字幕在线视频精品 | 成人精品在线观看 | 日本不卡一区二区三区在线观看 | 亚洲日本国产 | 亚洲成人精品一区二区 | 日韩欧美国产综合 | 中文字幕精品视频 | 日韩成人高清 | 日韩欧美精品 | 欧美不卡 | 在线视频成人 | 日韩有码在线播放 |