fn main() -&> Result& {
let json = r#"
{
"name": "大大",
"age": 30,
"blog": "http://www.kkk.net",
"addr": "4414 spdd bbb"
}"#;

let start = Instant::now();
let mut i = 0;
while i&<100000 { let u:User = serde_json::from_str(json)?; i = i + 1; } println!("time cost: {:?} ms", start.elapsed().as_millis());// ms Ok(()) }

cargo run release 运行 , mbp上540ms, 同样的代码go运行60ms 差了10倍, 哪里弄错了吗?

func TestJjson(t *testing.T) {

msg:= []byte(`{ "name": "大大", "age": 30,

"blog": "http://www.kkk.net",

"addr": "4414 spdd bbb" }`) t1 := time.Now() for i:=0; i&<100000; i++ { user:= User{} jsoniter.Unmarshal(msg, user) //fmt.Printf("%v", user)} elapsed := time.Since(t1)

fmt.Println("App elapsed: ", elapsed)

}


  1. 客观上这两种语言的性能基本一致,实际上rust稍微胜出;
  2. 问题本身所提供的代码不完整/不正确;
  3. 提问者测试的方式不正确:cargo run release 和 cargo run --release是两回事,前者是debug模式性能极差,公允的对比应该以后者方式测试。
  4. 提问者错误的测试方式得出错误的结论,并以此为标题,这样的标题是不客观的,具有强烈误导性的。


首先,

cargo run --release

然后试了一下你的程序,在我电脑上各跑1000次。

Rust 平均运行时间33ms,最大64ms,最小31ms,标准差3.46.

Go 平均运行时间39ms,最大119ms,最小32ms,标准差10.84.

仅供参考。


cargo run --release

注意这个--


cargo run --release


我也犯过一样的错误,debug下性能没有优化


cargo run release 相当于cargo run -- release,即用默认的debug模式运行,然后把"release"当作程序第一个参数塞进argv里面了。


需要关闭debug模式。。。。


在我的环境中运行.

c. emacsist@emacsists-MBP
,xNMM. ----------------------
.OMMMMo OS: macOS Catalina 10.15.5 19F101 x86_64
OMMM0, Host: MacBookPro11,1
.;loddo: loolloddol;. Kernel: 19.5.0
cKMMMMMMMMMMNWMMMMMMMMMM0: Uptime: 20 days, 3 hours, 37 mins
.KMMMMMMMMMMMMMMMMMMMMMMMWd. Packages: 195 (brew)
XMMMMMMMMMMMMMMMMMMMMMMMX. Shell: zsh 5.7.1
;MMMMMMMMMMMMMMMMMMMMMMMM: Resolution: 1680x1050@2x
:MMMMMMMMMMMMMMMMMMMMMMMM: DE: Aqua
.MMMMMMMMMMMMMMMMMMMMMMMMX. WM: Spectacle
kMMMMMMMMMMMMMMMMMMMMMMMMWd. Terminal: iTerm2
.XMMMMMMMMMMMMMMMMMMMMMMMMMMk Terminal Font: Monaco 12 (normal) / CousineForPowerline 12 (non-ascii)
.XMMMMMMMMMMMMMMMMMMMMMMMMK. CPU: Intel i5-4278U (4) @ 2.60GHz
kMMMMMMMMMMMMMMMMMMMMMMd GPU: Intel Iris
;KMMMMMMMWXXWMMMMMMMk. Memory: 5748MiB / 8192MiB
.cooc,. .,coo:.

相差比较远

Finished release [optimized] target(s) in 0.11s
Running `target/release/rust-hello`
time cost: 34 ms

Go

./hello
App elapsed: 118.920827ms


go不分debug和release模式,说明go在开发时就能全速运行,无缝体验


你是小白吗?命令都用错了


窥屏怪觉得你代码没写好. 溜了


推荐阅读:
相关文章