我学习Rust的目的并非说指望用它来取代掉现有的开发平台或语言。相反,我认为当前绝大部分研发团队,都不可能只用一个平台或者一个语言。css
当组织增加,他们愈来愈依赖大量的编程语言。不一样的编程语言有不一样的能力和弱点,而一个多语言栈让你在某个特定的编程语言的优势起做用的时候能使用它,当它有缺陷时使用其余编程语言。html
Rust 主要擅长的领域是:数值计算和线程。编程
我下面用一个实例来比较一下Rust和C#的性能方面表现。这个实例很简单,咱们准备开启10个线程,而后在每一个线程里面运行一个数值累加的工做任务(500万次。多线程
注意,如下测试的耗时,可能在各位的电脑上面会由于配置的不一样而不一样。个人配置以下编程语言
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,若是有不清楚,请参考我以前的文章: 性能
这个程序,在debug模式下运行的耗时大约是 0.55秒学习
在release模式下运行的耗时大约是 0.002秒测试
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秒spa
在Release模式下运行的耗时约为0.012秒pwa
汇总下来比较的结果以下
应该说C#新版本中对多线程管理是有了很大的提高的(包括语法很简化)。在Release模式下仍是比较慢,是由于Rust是没有运行时的,而C#是要通过CLR运行的。
不过,在Debug模式下,竟然C#大幅度胜出了,我感到很意外。从数值上来讲,只能说Rust在Debug模式下很慢(可能作了不少事情?)