zoukankan      html  css  js  c++  java
  • Rust初步(五):Rust与C#性能比较

    我学习Rust的目的并不是说期望用它来取代掉现有的开发平台或语言。相反,我认为当前绝大部分研发团队,都不可能只用一个平台或者一个语言。

    当组织增长,他们越来越依赖大量的编程语言。不同的编程语言有不同的能力和弱点,而一个多语言栈让你在某个特定的编程语言的优点起作用的时候能使用它,当它有缺陷时使用其他编程语言。

    Rust 主要擅长的领域是:数值计算和线程。

    我下面用一个实例来比较一下Rust和C#的性能方面表现。这个实例很简单,我们准备开启10个线程,然后在每个线程里面运行一个数值累加的工作任务(500万次。

    注意,以下测试的耗时,可能在各位的电脑上面会因为配置的不同而不同。我的配置如下

    image

    Rust的程序

    extern crate time;
    
    use std::thread;
    use time::*;
    
    fn main(){
    
    
        let start = time::now();//获取开始时间
    
        let handles :Vec<_> =(0..10).map(|_|{
            thread::spawn(||{
                let mut x= 0;
                for _ in (0..5_000_000){
                    x+=1
                }
                x
            })
        }).collect();
        for h in handles{
            println!("Thread finished with count={}",h.join().map_err(|_| "Could not join a thread!").unwrap());
        }
    
        let end = time::now();//获取结束时间
        let duration = end - start;
    
        println!("耗时:{}",duration);
    }
    

    需要注意的是,为了做耗时统计,我们采用了time这个crate,如果有不清楚,请参考我之前的文章:

    Rust初步(四):在rust中处理时间

    这个程序,在debug模式下运行的耗时大约是 0.55秒

    image

    在release模式下运行的耗时大约是 0.002秒

    image

    C#的程序:

    using System;
    using System.Threading.Tasks;
    using System.Diagnostics;
    using System.Threading;
    
    
    namespace ConsoleApplication1
    {
        class Program
        {
            static void Main(string[] args)
            {
    
                Stopwatch watch = new Stopwatch();
                watch.Start();
    
                Parallel.For(0, 10, i =>
                {
                    var x = 0;
                    for (int j = 0;  j< 5000000; j++)
                    {
                        x += 1;
                    }
                    Console.WriteLine("线程:{0} 完成计数",Thread.CurrentThread.ManagedThreadId);
                });
    
    
                watch.Stop();
                Console.WriteLine("耗时:{0}秒", watch.Elapsed.TotalSeconds);
                Console.Read();
            }
        }
    }
    

    在Debug模式下面运行的耗时约为0.06秒

    image

    在Release模式下运行的耗时约为0.012秒

    image

    汇总下来比较的结果如下

    image

    应该说C#新版本中对多线程管理是有了很大的提升的(包括语法很简化)。在Release模式下还是比较慢,是因为Rust是没有运行时的,而C#是要经过CLR运行的。

    不过,在Debug模式下,居然C#大幅度胜出了,我感到很意外。从数值上来说,只能说Rust在Debug模式下很慢(可能做了很多事情?)

  • 相关阅读:
    预处理器&预处理变量&头文件保护&条件编译
    Xctf攻防世界—crypto—Normal_RSA
    RSA共模攻击
    centos7安装宝塔面板
    cobalt strike出现连接超时情况解决办法
    C语言变量
    Hello World!
    ctfshow—web—web7
    ctfshow—web—web6
    ctfshow—web—web5
  • 原文地址:https://www.cnblogs.com/chenxizhang/p/4760172.html
Copyright © 2011-2022 走看看