0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Go在單線程計算性能上的優(yōu)勢

科技綠洲 ? 來源:Python實用寶典 ? 作者:Python實用寶典 ? 2023-11-02 11:16 ? 次閱讀

一文中,我們討論了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略勝一籌。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 緩存
    +關(guān)注

    關(guān)注

    1

    文章

    240

    瀏覽量

    26679
  • Go
    Go
    +關(guān)注

    關(guān)注

    0

    文章

    43

    瀏覽量

    12255
  • Redis
    +關(guān)注

    關(guān)注

    0

    文章

    375

    瀏覽量

    10878
  • 單線程
    +關(guān)注

    關(guān)注

    0

    文章

    17

    瀏覽量

    1772
收藏 人收藏

    評論

    相關(guān)推薦

    單線程的雙任務(wù)調(diào)度

    STM32是單線程的,通信協(xié)議層和應(yīng)用功能層的耦合性比較低,如果獨立運行,提高效率不少,主要實現(xiàn)的方法有哪些呢?
    發(fā)表于 01-10 10:15

    單線程SRAM靜態(tài)內(nèi)存使用

    概述本篇只要介紹這么使用STM32CubeMx工具添加RT-Thread操作系統(tǒng)組件,碼代碼的IDE是keil。介紹單線程SRAM靜態(tài)內(nèi)存使用。如果還不知道,這么使用STM32CubeMx工具添加
    發(fā)表于 08-24 06:57

    一種單線程編程思路簡析

    事件驅(qū)動?邏輯控制?基于回調(diào)的事件驅(qū)動或者邏輯控制特點代碼接口實現(xiàn)用法基于回調(diào)的事件驅(qū)動或者邏輯控制本文提供了一種單線程編程思路,并簡單實現(xiàn)了該思路。受PLC編程線圈和觸點概念的啟發(fā)。將程序抽象理解
    發(fā)表于 02-16 06:58

    python多線程和多進程對比

    時間:2.0076842308044434秒3. 性能對比成果總結(jié)將結(jié)果匯總一下,制成表格。我們來分析下這個表格。首先是CPU密集型,多線程以對比單線程,不僅沒有優(yōu)勢,顯然還由于要不斷
    發(fā)表于 03-15 16:42

    線程好還是單線程好?單線程和多線程的區(qū)別 優(yōu)缺點分析

    摘要:如今單線程與多線程已經(jīng)得到普遍運用,那么到底多線程好還是單線程好呢?單線程和多線程的區(qū)別又
    發(fā)表于 12-08 09:33 ?8.1w次閱讀

    從I/O的阻塞與非阻塞、I/O處理的單線程與多線程角度探討服務(wù)器模型

    這里探討的服務(wù)器模型主要指的是服務(wù)器端對I/O的處理模型。從不同維度可以有不同的分類,這里從I/O的阻塞與非阻塞、I/O處理的單線程與多線程角度探討服務(wù)器模型。
    的頭像 發(fā)表于 01-08 16:13 ?7004次閱讀

    Intel處理器占據(jù)CPU單線程性能前17位 酷睿i9-9900KS仍穩(wěn)居榜首

    目前,PassMark的CPU單線程性能圖表仍然由Intel芯片主導(dǎo)。AMD的Ryzen 9 PRO 3900前面,總共有17個Intel處理器占據(jù)了主導(dǎo)地位。
    發(fā)表于 04-09 14:39 ?2745次閱讀
    Intel處理器占據(jù)CPU<b class='flag-5'>單線程</b><b class='flag-5'>性能</b>前17位 酷睿i9-9900KS仍穩(wěn)居榜首

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

    我們調(diào)試爬蟲程序的時候,單線程爬蟲沒什么問題,但是當(dāng)我們在線上環(huán)境使用單線程爬蟲程序去采集網(wǎng)頁時,單線程就暴露出了兩個致命的問題:
    的頭像 發(fā)表于 05-05 21:25 ?1965次閱讀
    實現(xiàn)Java多<b class='flag-5'>線程</b>爬蟲的兩點

    這款16核怪物單線程和多線程性能方面均躍居主流處理器榜首

    盡管AMD一段時間以來一直主流芯片中注入更多的內(nèi)核,但在單線程性能方面,這家芯片制造商的產(chǎn)品還不能與Intel的產(chǎn)品相提并論。如果這些PassMark號碼準(zhǔn)確無誤,那么Zen 3似乎終于可以輕而易舉地獲得AMD的青睞。
    的頭像 發(fā)表于 10-28 15:24 ?2104次閱讀

    單線程也能開發(fā)異步任務(wù)?ACE JS框架到底是如何做到的

    HarmonyOS 2提供了兩種應(yīng)用開發(fā)語言:Java和JS。Java線程性能夠讓多任務(wù)并行,充分利用硬件資源開發(fā)出高性能的應(yīng)用。而JS卻是一個單線程語言,無法像Java一樣創(chuàng)建新的
    的頭像 發(fā)表于 08-13 17:16 ?2041次閱讀
    <b class='flag-5'>單線程</b>也能開發(fā)異步任務(wù)?ACE JS框架到底是如何做到的

    Redis為何選擇單線程

    Redis為何選擇單線程Redisv6.0以前,Redis的核心網(wǎng)絡(luò)模型選擇用單線程來實現(xiàn)。 核心意思就是,對于一個 DB 來說,CPU 通常不會是瓶頸,因為大多數(shù)請求不會是 CPU 密集型
    的頭像 發(fā)表于 10-09 10:59 ?382次閱讀

    單線程是否會引起 fail-fast機制

    ConcurrentModificationException 異常,產(chǎn)生 fail-fast 事件。 多線程?并發(fā)修改?才會引起 fail-fast 機制保護程序?小 B 覺得這個答案沒有說全,面試官說了單線程
    的頭像 發(fā)表于 10-10 16:31 ?405次閱讀
    <b class='flag-5'>單線程</b>是否會引起 fail-fast機制

    redis多線程還能保證線程安全嗎

    Redis是一種使用C語言編寫的高性能鍵值存儲系統(tǒng),它是單線程的,因為使用了多路復(fù)用的方式來處理并發(fā)請求。這樣的實現(xiàn)方式帶來了很好的性能,但同時也引發(fā)了一些線程安全方面的問題。
    的頭像 發(fā)表于 12-05 10:28 ?1814次閱讀

    什么是多核多線程?多核多線程如何提高程序的運行效率?

    單線程無法充分利用多核處理器的并行計算能力。
    的頭像 發(fā)表于 02-20 10:22 ?1361次閱讀

    Linux性能基準(zhǔn)測試工具選擇與測試策略

    Super_Pi 是一種用于計算圓周率π的程序,通常用于測試計算性能和穩(wěn)定性。它的主要用途是測量系統(tǒng)的單線程性能,因為它是一個
    發(fā)表于 04-26 16:24 ?396次閱讀
    Linux<b class='flag-5'>性能</b>基準(zhǔn)測試工具選擇與測試策略