Rust和c#语言10线程100万次运算耗时对比

rust
let handles :Vec<> =(0..10).map(||{
thread::spawn(||{
let mut x= 0;
for _ in (0..1000000){
x+=1
}
x
})
}).collect();

Debug
1.
rust线程:1000000 完成计数
rust线程:1000000 完成计数
rust线程:1000000 完成计数
rust线程:1000000 完成计数
rust线程:1000000 完成计数
rust线程:1000000 完成计数
rust线程:1000000 完成计数
rust线程:1000000 完成计数
rust线程:1000000 完成计数
rust线程:1000000 完成计数
耗时:PT0.211877100S秒

rust线程:1000000 完成计数
rust线程:1000000 完成计数
rust线程:1000000 完成计数
rust线程:1000000 完成计数
rust线程:1000000 完成计数
rust线程:1000000 完成计数
rust线程:1000000 完成计数
rust线程:1000000 完成计数
rust线程:1000000 完成计数
rust线程:1000000 完成计数
耗时:PT0.231867500S秒

rust线程:1000000 完成计数
rust线程:1000000 完成计数
rust线程:1000000 完成计数
rust线程:1000000 完成计数
rust线程:1000000 完成计数
rust线程:1000000 完成计数
rust线程:1000000 完成计数
rust线程:1000000 完成计数
rust线程:1000000 完成计数
rust线程:1000000 完成计数
耗时:PT0.198885600S秒

Release:
1.
rust线程:1000000 完成计数
rust线程:1000000 完成计数
rust线程:1000000 完成计数
rust线程:1000000 完成计数
rust线程:1000000 完成计数
rust线程:1000000 完成计数
rust线程:1000000 完成计数
rust线程:1000000 完成计数
rust线程:1000000 完成计数
rust线程:1000000 完成计数
耗时:PT0.026984800S秒

rust线程:1000000 完成计数
rust线程:1000000 完成计数
rust线程:1000000 完成计数
rust线程:1000000 完成计数
rust线程:1000000 完成计数
rust线程:1000000 完成计数
rust线程:1000000 完成计数
rust线程:1000000 完成计数
rust线程:1000000 完成计数
rust线程:1000000 完成计数
耗时:PT0.014990900S秒

rust线程:1000000 完成计数
rust线程:1000000 完成计数
rust线程:1000000 完成计数
rust线程:1000000 完成计数
rust线程:1000000 完成计数
rust线程:1000000 完成计数
rust线程:1000000 完成计数
rust线程:1000000 完成计数
rust线程:1000000 完成计数
rust线程:1000000 完成计数
耗时:PT0.009991S秒


c#
Parallel.For(0, 10, i =>
{
var x = 0;
for (int j = 0; j < 1000000; j++)
{
x += 1;
}
Console.WriteLine("线程:{0} 完成计数", Thread.CurrentThread.ManagedThreadId);
});
Debug:
1.
c#线程:5 完成计数
c#线程:1 完成计数
c#线程:4 完成计数
c#线程:6 完成计数
c#线程:7 完成计数
c#线程:5 完成计数
c#线程:4 完成计数
c#线程:1 完成计数
c#线程:7 完成计数
c#线程:6 完成计数
耗时:0.1360158秒
2
c#线程:4 完成计数
c#线程:1 完成计数
c#线程:5 完成计数
c#线程:4 完成计数
c#线程:6 完成计数
c#线程:4 完成计数
c#线程:5 完成计数
c#线程:6 完成计数
c#线程:1 完成计数
c#线程:6 完成计数
耗时:0.2220837秒
3
c#线程:1 完成计数
c#线程:7 完成计数
c#线程:4 完成计数
c#线程:5 完成计数
c#线程:6 完成计数
c#线程:7 完成计数
c#线程:4 完成计数
c#线程:5 完成计数
c#线程:6 完成计数
c#线程:1 完成计数
耗时:0.2674945秒

Release:
1
c#线程:5 完成计数
c#线程:1 完成计数
c#线程:4 完成计数
c#线程:6 完成计数
c#线程:7 完成计数
c#线程:5 完成计数
c#线程:1 完成计数
c#线程:4 完成计数
c#线程:7 完成计数
c#线程:6 完成计数
耗时:0.0419944秒
2
c#线程:5 完成计数
c#线程:1 完成计数
c#线程:4 完成计数
c#线程:6 完成计数
c#线程:7 完成计数
c#线程:5 完成计数
c#线程:1 完成计数
c#线程:4 完成计数
c#线程:7 完成计数
c#线程:6 完成计数
耗时:0.0421988秒
3
c#线程:1 完成计数
c#线程:5 完成计数
c#线程:6 完成计数
c#线程:4 完成计数
c#线程:1 完成计数
c#线程:5 完成计数
c#线程:7 完成计数
c#线程:1 完成计数
c#线程:4 完成计数
c#线程:6 完成计数
耗时:0.0461132秒

c#
Debug:0.13s Release:0.041s
rust
Debug:0.19s Release:0.009s

Release时C#耗时长,因C#是要经过CLR运行。

This is an English-language forum.

1 Like

It's true that most conversations in this forum use english and non-english questions unlikely get quick answers. But I can't find any explicit statement that this forum is an english language forum. Am I missing something?

6 Likes

Perhaps not. But let's say this is only de facto an English-language forum, not de jure.
In that case the reply by @jhpratt is still useful, if only as a warning that OP likely isn't getting an answer any time soon.

Well, I've never seen anything other than English be used on here in my time, which is a fair amount. Either way, posting in what appears to be Mandarin isn't going to get OP the help they want more than likely.

What's your purpose to compare C# and Rust with a simple sum operations?

You can use code block to format your code.

This benchmark only tests speed of spawning threads, not speed of addition. This is because the loop compiles down to a constant:

example::sum:
        mov     eax, 1000000
        ret
pub fn sum() -> i32 {      
    let mut x= 0;
    for _ in (0..1000000){
        x+=1
    }
    x
}
6 Likes

This topic was automatically closed 90 days after the last reply. We invite you to open a new topic if you have further questions or comments.