rust 解析 json 为啥比go慢10倍?
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)
}
- 客观上这两种语言的性能基本一致,实际上rust稍微胜出;
- 问题本身所提供的代码不完整/不正确;
- 提问者测试的方式不正确:cargo run release 和 cargo run --release是两回事,前者是debug模式性能极差,公允的对比应该以后者方式测试。
- 提问者错误的测试方式得出错误的结论,并以此为标题,这样的标题是不客观的,具有强烈误导性的。
首先,
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在开发时就能全速运行,无缝体验
你是小白吗?命令都用错了
窥屏怪觉得你代码没写好. 溜了