一文中,我們討論了Go在單線程計算性能上的優勢。
現在,考慮這樣的一種場景:
我們需要從某些網址中同步數據并進行計算,保存到本地redis緩存中。
現在,我們可以通過編寫Go Worker的方式,將計算和保存的過程保存在本地的redis緩存中,然后使用Celery來調度這些任務。
問題在于,從這些網址中獲取數據的步驟,寫在Go Worker里是否合適?Go進行網絡請求是否比Python更穩定、速度更快?今天我們就來簡單地比較一下。
1.同步比較
首先,試試Go語言請求百度,獲得這個請求和拿到回應之間的時間差:
結果如下:
可以看到,平均耗時在250ms左右。
然后測試Python的requests模塊請求網站:
結果如下:
平均約220ms,似乎在單個請求的情況下,Python略勝一籌。
但是單個請求的比較是沒有意義的,因為這個差異可以忽略不計。
重點還是在下面并發請求的比較上。
2.并發比較
現在,我們試試用Go語言并發請求10次百度:
效果如下:
平均消耗在300ms左右,和單次請求差不多,速度還是相當快的。
接下來試試Python的并發請求,值得注意的是,這里沒有用requests模板,因為 requests模塊是同步的 ,這一點一定要注意。
因此在這里需要使用aiohttp進行并發請求:
測試結果如下:
可以看到,平均耗時在500ms左右,在并發的時候,其速度相比于Go略遜一籌。
3.總結
可以看到,Python在單個請求的時候(使用requests模塊)速度比Go稍微快一丟丟,但是這樣的區別幾乎可以忽略不計。
在并發10次請求的情況下,Go平均耗時300ms,而Python平均耗時500ms,Go略勝一籌。
-
緩存
+關注
關注
1文章
243瀏覽量
26828 -
Go
+關注
關注
0文章
44瀏覽量
12295 -
Redis
+關注
關注
0文章
380瀏覽量
11046 -
單線程
+關注
關注
0文章
18瀏覽量
1795
發布評論請先 登錄
相關推薦
單線程SRAM靜態內存使用
一種單線程編程思路簡析
python多線程和多進程對比
多線程好還是單線程好?單線程和多線程的區別 優缺點分析
從I/O的阻塞與非阻塞、I/O處理的單線程與多線程角度探討服務器模型
Intel處理器占據CPU單線程性能前17位 酷睿i9-9900KS仍穩居榜首

這款16核怪物在單線程和多線程性能方面均躍居主流處理器榜首
單線程也能開發異步任務?ACE JS框架到底是如何做到的

Redis為何選擇單線程
單線程是否會引起 fail-fast機制

redis多線程還能保證線程安全嗎
Linux性能基準測試工具選擇與測試策略

評論