您当前的位置:首页 > 电脑百科 > 程序开发 > 语言 > 百科

Go vs Rust:文件上传性能比较

时间:2023-11-20 14:53:52  来源:微信公众号  作者:技术的游戏

一、设置

所有测试都在配备16G内存macBook Pro M1 上执行。

软件版本为:

  • Go v1.20.5
  • Rust v1.70.0

测试工具是一个基于 libcurl 并使用标准线程的自定义工具,能够发送多部分请求。

资产目录中有 100,000 个文件。每个文件的大小都是确切的 100K。这些文件数量在测试工作线程之间进行分配。同一个文件不会一遍又一遍地上传。工作线程会循环处理分配给它们的文件。一旦它们处理完所有分配的文件,它们就会回到第一个文件重新开始。

每个请求携带两个文件作为多部分请求体。请求的头部和体部大致如下:

// -- Headers

{
  "content-length": "205150",
  "content-type": "multipart/form-data; boundary=------------------------3f6a15690b315b91",
}

// -- Body

--------------------------3f6a15690b315b91
Content-Disposition: form-data; name="files"; filename="45469"
Content-Type: Application/octet-stream

<<File suppressed>>
--------------------------3f6a15690b315b91
Content-Disposition: form-data; name="files"; filename="42102"
Content-Type: application/octet-stream

<<file suppressed>>
--------------------------3f6a15690b315b91--

二、代码

1.Go

package mAIn

import (
    "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下编译。

三、结果

对10个、50个和100个并发连接执行测试。每个测试总共执行10万个请求。以下是结果:

Go vs Rust:文件上传性能比较

Go vs Rust:文件上传性能比较

四、结论

从结果中使用以下公式生成了一个评分表。对于每个测量,获取获胜的幅度。如果获胜幅度为:

  • < 5%,不给予任何分数
  • 在 5% 和 20% 之间,给予获胜者 1 分
  • 在 20% 和 50% 之间,给予获胜者 2 分
  • > 50%,给予获胜者 3 分

Go vs Rust:文件上传性能比较

Go vs Rust:文件上传性能比较



Tags:Rust   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除。
▌相关推荐
Go vs Rust:文件上传性能比较
一、设置所有测试都在配备16G内存的 MacBook Pro M1 上执行。软件版本为: Go v1.20.5 Rust v1.70.0测试工具是一个基于 libcurl 并使用标准线程的自定义工具,能够发送多部分请...【详细内容】
2023-11-20  Tags: Rust  点击:(0)  评论:(0)  加入收藏
Rust、Zig,能够干翻Java、C?
撰稿 | 云昭出品 | 51CTO技术栈(微信号:blog51cto)众所周知,由于其根源于 Mozilla,Rust 在历史上与系统编程联系在一起,它对安全性、速度和并发性的承诺,使其在基础设施层面得到了...【详细内容】
2023-11-17  Tags: Rust  点击:(7)  评论:(0)  加入收藏
Rust 十月就业报告:备受大厂青睐
智能招聘平台 filtra 发布了编程语言 Rust 的 10 月就业报告,相比 9 月的462 条招聘信息,10 月略微下降到了 460 条,但雇主数量略有增长,整体而言,Rust 的就业形式处于比较平稳的...【详细内容】
2023-11-15  Tags: Rust  点击:(13)  评论:(0)  加入收藏
揭开勒索软件LostTrust的神秘面纱
勒索软件LostTrust一直被安全社区认为是MetaEncryptor勒索软件的“换壳”产品,因为它们几乎使用了相同的数据泄露网站和加密程序。LostTrust勒索软件于2023年3月开始积极活动...【详细内容】
2023-11-02  Tags: Rust  点击:(15)  评论:(0)  加入收藏
Rust 变量,你学会了吗?
Rust 是一门强调安全、并发、高效的系统编程语言。无 GC 实现内存安全机制、无数据竞争的并发机制、无运行时开销的抽象机制,是 Rust 独特的优越特性。 它声称解决了传统 C...【详细内容】
2023-11-01  Tags: Rust  点击:(19)  评论:(0)  加入收藏
Rust 编译为WebAssembly 在前端项目中使用
前言最近,不是加大了对Rust相关文章的输出吗,在评论区或者私信区。有一些不同的声音说:“Rust没有前途,然后...."。其实呢,看一个技术是否有需要学习的动力。想必大家的底层理由...【详细内容】
2023-10-27  Tags: Rust  点击:(40)  评论:(0)  加入收藏
WEB3结合AI的新宠MixTrust
随着人工智能的迅猛发展,我们看到了它的双刃剑效应。虽然AI技术为我们带来了许多便利,但同时也导致了虚假和匿名账户泛滥的问题。人工智能可以轻松生成文本、制作深度伪造视频...【详细内容】
2023-10-16  Tags: Rust  点击:(38)  评论:(0)  加入收藏
通过这个技术,浏览器可以运行Node.js、Rust、Python、PHP、C++、Java代码了!
近日,WebContainers 发布重要更新,WASI(WebAssembly 系统接口)已全面集成到 WebContainers 中。这是一个重要里程碑,它扩大了可以使用浏览器执行的操作,是 Web 开发的全新范例,允许...【详细内容】
2023-10-13  Tags: Rust  点击:(46)  评论:(0)  加入收藏
不要按照 Java 的方式编写 Rust
【CSDN 编者按】停止按照 Java 的方式编写 Rust,这是我发现编写 Rust 代码的乐趣。原文链接:https://jgayfer.com/dont-write-rust-like-java作者 | James Gayfer译者| 弯月责...【详细内容】
2023-10-13  Tags: Rust  点击:(38)  评论:(0)  加入收藏
谷歌宣布正使用 Rust 语言重写 Android 安全关键组件
IT之家 10 月 10 日消息,谷歌在去年声称正在将 Android 原生代码从 C++ 迁移到 Rust,目前谷歌在博客中发布文章,展示了当前使用 Rust 语言的新进展。据悉,谷歌正在使用 Rust 语...【详细内容】
2023-10-11  Tags: Rust  点击:(40)  评论:(0)  加入收藏
▌简易百科推荐
Go vs Rust:文件上传性能比较
一、设置所有测试都在配备16G内存的 MacBook Pro M1 上执行。软件版本为: Go v1.20.5 Rust v1.70.0测试工具是一个基于 libcurl 并使用标准线程的自定义工具,能够发送多部分请...【详细内容】
2023-11-20  技术的游戏  微信公众号  Tags:Rust   点击:(0)  评论:(0)  加入收藏
一文读懂 TypeScript 泛型及应用
泛型是静态类型语言的基本特征,允许将类型作为参数传递给另一个类型、函数、或者其他结构。TypeScript 支持泛型作为将类型安全引入组件的一种方式。这些组件接受参数和返回...【详细内容】
2023-11-20  前端充电宝  微信公众号  Tags:TypeScript   点击:(3)  评论:(0)  加入收藏
各类语言真实性能比较列表
这篇文章是关于所有真实世界性能比较的索引。如果你对想要看到的其他真实世界案例有建议,请在评论中添加。用例 1 &mdash; JWT 验证 & MySQL 查询该用例包括: 从授权头部获取...【详细内容】
2023-11-20  技术的游戏  微信公众号  Tags:语言   点击:(2)  评论:(0)  加入收藏
Rust、Zig,能够干翻Java、C?
撰稿 | 云昭出品 | 51CTO技术栈(微信号:blog51cto)众所周知,由于其根源于 Mozilla,Rust 在历史上与系统编程联系在一起,它对安全性、速度和并发性的承诺,使其在基础设施层面得到了...【详细内容】
2023-11-17    51CTO  Tags:Rust   点击:(7)  评论:(0)  加入收藏
Kotlin 将取代 Java,跻身 Top 10?| TIOBE 11 月榜单发布
整理 | 郑丽媛出品 | CSDN(ID:CSDNnews)一个月的时间过得很快,转眼之间 11 月 TIOBE 编程语言榜单已最新出炉,一起来看看这个月又有什么值得关注的新变化吧?“确信 Kotlin 能跻身...【详细内容】
2023-11-14    CSDN  Tags:TIOBE   点击:(19)  评论:(0)  加入收藏
找工作学什么编程语言?聊聊主流选择
你是不是在为学什么编程语言而犯愁呢?现如今,在互联网编程领域,你可能听说过很多编程语言,而选择哪种学习可能会让你陷入纠结。不要担心,今天小狮妹就聊聊这个话题,希望能帮你找到...【详细内容】
2023-11-03  编程狮W3Cschool    Tags:编程语言   点击:(9)  评论:(0)  加入收藏
2023 年 WebAssembly 现状:第四种 Web 语言
2023 年度 WebAssembly 现状调查结果出炉,下面就来看看 2023 年的 WebAssembly 发展的怎么样了!WebAssembly 是一种可移植、低级别的字节码语言,旨在提供一种通用的编译目标,以...【详细内容】
2023-10-20  前端充电宝  微信公众号  Tags:WebAssembly   点击:(54)  评论:(0)  加入收藏
每个开发人员都想使用的编程语言
作者丨Oscar Leo编译丨诺亚 在任何时候,一些编程语言都会把大量的开发人员变成热情的布道者,试图说服世界其他地方的人相信它的伟大。 当热起来的时候,这种语言可能会成为行业...【详细内容】
2023-10-13    51CTO  Tags:编程语言   点击:(47)  评论:(0)  加入收藏
OC消息发送和转发机制原理
Objective-C(OC)是一门面向对象的编程语言,它在消息传递和方法调用方面具有独特的机制。在OC中,对象通过消息来调用方法,而不是像传统的编程语言那样直接调用函数。本文将深入探...【详细内容】
2023-10-13  good7ob  微信公众号  Tags:OC   点击:(57)  评论:(0)  加入收藏
SQL和Python,哪个更容易自学?哪个更适合数据工作的编程新手?
如果你想从事数据工作,比如数据分析、数据开发、数据科学等,你可能会遇到这样的问题:SQL和Python哪个更容易自学?哪个更有用?哪个更有前途?其实这两种语言都是数据工作的重要技能,...【详细内容】
2023-10-11  w3cschool编程狮  微信公众号  Tags:SQL   点击:(47)  评论:(0)  加入收藏
站内最新
站内热门
站内头条