一文中,我們討論了Go在單線程計算性能上的優(yōu)勢。
現(xiàn)在,考慮這樣的一種場景:
我們需要從某些網(wǎng)址中同步數(shù)據(jù)并進行計算,保存到本地redis緩存中。
現(xiàn)在,我們可以通過編寫Go Worker的方式,將計算和保存的過程保存在本地的redis緩存中,然后使用Celery來調(diào)度這些任務(wù)。
問題在于,從這些網(wǎng)址中獲取數(shù)據(jù)的步驟,寫在Go Worker里是否合適?Go進行網(wǎng)絡(luò)請求是否比Python更穩(wěn)定、速度更快?今天我們就來簡單地比較一下。
1.同步比較
首先,試試Go語言請求百度,獲得這個請求和拿到回應(yīng)之間的時間差:
結(jié)果如下:
可以看到,平均耗時在250ms左右。
然后測試Python的requests模塊請求網(wǎng)站:
結(jié)果如下:
平均約220ms,似乎在單個請求的情況下,Python略勝一籌。
但是單個請求的比較是沒有意義的,因為這個差異可以忽略不計。
重點還是在下面并發(fā)請求的比較上。
2.并發(fā)比較
現(xiàn)在,我們試試用Go語言并發(fā)請求10次百度:
效果如下:
平均消耗在300ms左右,和單次請求差不多,速度還是相當(dāng)快的。
接下來試試Python的并發(fā)請求,值得注意的是,這里沒有用requests模板,因為 requests模塊是同步的 ,這一點一定要注意。
因此在這里需要使用aiohttp進行并發(fā)請求:
測試結(jié)果如下:
可以看到,平均耗時在500ms左右,在并發(fā)的時候,其速度相比于Go略遜一籌。
3.總結(jié)
可以看到,Python在單個請求的時候(使用requests模塊)速度比Go稍微快一丟丟,但是這樣的區(qū)別幾乎可以忽略不計。
在并發(fā)10次請求的情況下,Go平均耗時300ms,而Python平均耗時500ms,Go略勝一籌。
-
緩存
+關(guān)注
關(guān)注
1文章
240瀏覽量
26679 -
Go
+關(guān)注
關(guān)注
0文章
43瀏覽量
12255 -
Redis
+關(guān)注
關(guān)注
0文章
375瀏覽量
10878 -
單線程
+關(guān)注
關(guān)注
0文章
17瀏覽量
1772
發(fā)布評論請先 登錄
相關(guān)推薦
評論