一文中,我們討論了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文章
233瀏覽量
26648 -
Go
+關注
關注
0文章
43瀏覽量
12241 -
Redis
+關注
關注
0文章
371瀏覽量
10846 -
單線程
+關注
關注
0文章
17瀏覽量
1769
發布評論請先 登錄
相關推薦
評論