一文中,我們討論了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文章
245瀏覽量
27001 -
Go
+關(guān)注
關(guān)注
0文章
45瀏覽量
12332 -
Redis
+關(guān)注
關(guān)注
0文章
382瀏覽量
11252 -
單線程
+關(guān)注
關(guān)注
0文章
18瀏覽量
1817
發(fā)布評論請先 登錄
單線程的雙任務(wù)調(diào)度
單線程SRAM靜態(tài)內(nèi)存使用
一種單線程編程思路簡析
python多線程和多進程對比
多線程好還是單線程好?單線程和多線程的區(qū)別 優(yōu)缺點分析
從I/O的阻塞與非阻塞、I/O處理的單線程與多線程角度探討服務(wù)器模型
Intel處理器占據(jù)CPU單線程性能前17位 酷睿i9-9900KS仍穩(wěn)居榜首

實現(xiàn)Java多線程爬蟲的兩點

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

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

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

評論