日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

Go vs Rust:文件上傳性能比較

來源: 責編: 時間:2023-11-20 08:58:07 331觀看
導讀在本文中,主要測試并比較了Go—Gin和Rust—Actix之間的多部分文件上傳性能。一、設置所有測試都在配備16G內存的 MacBook Pro M1 上執行。軟件版本為:Go v1.20.5Rust v1.70.0測試工具是一個基于 libcurl 并使用標準線程

在本文中,主要測試并比較了Go—Gin和Rust—Actix之間的多部分文件上傳性能。LtU28資訊網——每日最新資訊28at.com

LtU28資訊網——每日最新資訊28at.com

一、設置

所有測試都在配備16G內存的 MacBook Pro M1 上執行。LtU28資訊網——每日最新資訊28at.com

軟件版本為:LtU28資訊網——每日最新資訊28at.com

  • Go v1.20.5
  • Rust v1.70.0

測試工具是一個基于 libcurl 并使用標準線程的自定義工具,能夠發送多部分請求。LtU28資訊網——每日最新資訊28at.com

資產目錄中有 100,000 個文件。每個文件的大小都是確切的 100K。這些文件數量在測試工作線程之間進行分配。同一個文件不會一遍又一遍地上傳。工作線程會循環處理分配給它們的文件。一旦它們處理完所有分配的文件,它們就會回到第一個文件重新開始。LtU28資訊網——每日最新資訊28at.com

每個請求攜帶兩個文件作為多部分請求體。請求的頭部和體部大致如下:LtU28資訊網——每日最新資訊28at.com

// -- Headers{  "content-length": "205150",  "content-type": "multipart/form-data; boundary=------------------------3f6a15690b315b91",}// -- Body--------------------------3f6a15690b315b91Content-Disposition: form-data; name="files"; filename="45469"Content-Type: application/octet-stream<<File suppressed>>--------------------------3f6a15690b315b91Content-Disposition: form-data; name="files"; filename="42102"Content-Type: application/octet-stream<<file suppressed>>--------------------------3f6a15690b315b91--

二、代碼

1.Go

package mainimport (    "github.com/gin-gonic/gin"    "github.com/jaevor/go-nanoid")func main() {    dst := "/Users/mayankc/Work/source/perfComparisons/uploads/"    canonicID, err := nanoid.Standard(21)    if err != nil {        panic(err)    }    router := gin.New()    router.POST("/upload", func(c *gin.Context) {        form, _ := c.MultipartForm()        files := form.File["files"]        for _, file := range files {            c.SaveUploadedFile(file, dst+canonicID())        }        c.Writer.WriteHeader(201)    })    router.Run(":3000")}

2.Rust

use actix_multipart::{    form::{        tempfile::{TempFile, TempFileConfig},        MultipartForm,    }};use actix_web::{middleware, web, App, Error, HttpResponse, HttpServer, Responder};use nanoid::nanoid;const BASE_DIR: &str = "/Users/mayankc/Work/source/perfComparisons/uploads/";#[derive(Debug, MultipartForm)]struct UploadForm {    #[multipart(rename = "files")]    files: Vec<TempFile>,}async fn save_files(    MultipartForm(form): MultipartForm<UploadForm>,) -> Result<impl Responder, Error> {    for f in form.files {        let path = format!("{}{}", BASE_DIR, nanoid!());        f.file.persist(path).unwrap();    }    Ok(HttpResponse::Ok())}#[actix_web::main]async fn main() -> std::io::Result<()> {    HttpServer::new(|| {        App::new()            .wrap(middleware::Logger::default())            .app_data(TempFileConfig::default().directory(BASE_DIR))            .service(                web::resource("/upload")                    .route(web::post().to(save_files)),            )    })    .bind(("127.0.0.1", 3000))?    .run()    .await}

Rust代碼已在release mode下編譯。LtU28資訊網——每日最新資訊28at.com

三、結果

對10個、50個和100個并發連接執行測試。每個測試總共執行10萬個請求。以下是結果:LtU28資訊網——每日最新資訊28at.com

LtU28資訊網——每日最新資訊28at.com

LtU28資訊網——每日最新資訊28at.com

四、結論

從結果中使用以下公式生成了一個評分表。對于每個測量,獲取獲勝的幅度。如果獲勝幅度為:LtU28資訊網——每日最新資訊28at.com

  • < 5%,不給予任何分數
  • 在 5% 和 20% 之間,給予獲勝者 1 分
  • 在 20% 和 50% 之間,給予獲勝者 2 分
  • > 50%,給予獲勝者 3 分

LtU28資訊網——每日最新資訊28at.com

LtU28資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-31012-0.htmlGo vs Rust:文件上傳性能比較

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: Django-simpleui的菜單權限配置,實現無權限不顯示菜單

下一篇: C++ 20類型轉換指南:使用場景與優秀實踐

標簽:
  • 熱門焦點
Top 主站蜘蛛池模板: 博野县| 伊宁市| 达州市| 丹寨县| 长沙市| 南靖县| 象山县| 锡林郭勒盟| 永川市| 齐河县| 安平县| 蕉岭县| 保亭| 建平县| 方城县| 油尖旺区| 简阳市| 镇原县| 台北市| 正定县| 吉林省| 武穴市| 大厂| 浑源县| 库伦旗| 盘山县| 吉林省| 邢台市| 海淀区| 峨山| 广汉市| 衡阳县| 永吉县| 阳春市| 中牟县| 朝阳区| 临沭县| 石阡县| 凤城市| 彰化县| 商丘市|