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

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

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

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

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

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

一、設置

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

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

  • Go v1.20.5
  • Rust v1.70.0

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

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

每個請求攜帶兩個文件作為多部分請求體。請求的頭部和體部大致如下:zhT28資訊網——每日最新資訊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下編譯。zhT28資訊網——每日最新資訊28at.com

三、結果

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

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

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

四、結論

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

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

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

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

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

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

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

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

標簽:
  • 熱門焦點
Top 主站蜘蛛池模板: 东丽区| 蕲春县| 滕州市| 侯马市| 抚远县| 米泉市| 海盐县| 金溪县| 乌苏市| 丰原市| 兰西县| 响水县| 浮梁县| 马关县| 神农架林区| 连南| 潮州市| 策勒县| 陵水| 贡山| 肥乡县| 汶上县| 濮阳市| 佛山市| 哈尔滨市| 伊金霍洛旗| 敦煌市| 长顺县| 瑞安市| 沽源县| 绥宁县| 五华县| 佳木斯市| 宝丰县| 泸州市| 渝中区| 武定县| 府谷县| 崇义县| 仲巴县| 奉贤区|