rust风化速度_反驳《Golang、Rust的执行速度的对照,让人大吃一惊。》——不会别瞎说...
首先我无意引战,但是今天看到某位同学的文章里有某些错误,不得不指正一下。
1. 测量时间的时候我们使用 `std::time::SystemTime::elapsed` 即可,不必蹩脚的使用两个 system 输出出来还得手动算一下。(当然你说对Rust不熟也就无所谓了)
2. 最重要一点。 执行 rust 代码的时候请用 `--release` ,cargo 项目请直接执行 `cargo run --release`
在我本机的测试过程:
```
➜ demo pwd
/Users/wayslog/go/src/demo
➜ demo go version
go version go1.7.1 darwin/amd64
➜ demo cat demo.go
package main
import (
"fmt"
"runtime"
"time"
)
func main() {
runtime.GC()
t := time.Now()
sum := 0
for i := 0; i < 20000; i++ {
for j := 0; j < 20000; j++ {
sum = sum + i*j
}
}
fmt.Println(time.Now().Sub(t))
fmt.Println(sum)
}
➜ demo go run demo.go
236.312079ms
39996000100000000
➜ demo go build
➜ demo ./demo
289.696142ms
39996000100000000
➜ demo cd ~/rust/baka
➜ baka git:(master) ✗ cat src/main.rs
use std::time::SystemTime;
fn main() {
let sys_time = SystemTime::now();
let mut x = 0;
let mut i = 0;
let mut y: u64 = 0;
while x < 20000 {
i = 0;
while i < 20000 {
y = y + x * i;
i = i + 1;
}
x = x + 1;
}
println!("{:?}", sys_time.elapsed());
println!("The value of y is: {}", y);
}
➜ baka git:(master) ✗ cargo run --release
Finished release [optimized] target(s) in 0.0 secs
Running `target/release/baka`
Ok(Duration { secs: 0, nanos: 0 })
The value of y is: 39996000100000000
➜ baka git:(master) ✗ cargo build --release
Finished release [optimized] target(s) in 0.0 secs
➜ baka git:(master) ✗ ./target/release/baka
Ok(Duration { secs: 0, nanos: 0 })
The value of y is: 39996000100000000
```
Rust这里为什么会跑到0秒0ns呢?
将rust编译到asm我们能看到, 地址在这:https://is.gd/CyE36H:
```
```
编译时计算掉了么?
OK,既然编译时计算掉了这个情况,那么,我们让用户自己输入数字吧,这样编译时计算总优化不掉吧?
```
➜ baka git:(master) ✗ cat src/main.rs
use std::time::SystemTime;
use std::env;
fn main() {
let mut args = env::args();
args.next().unwrap();
let max_range = args.next().unwrap().parse::().expect("not num");
let sys_time = SystemTime::now();
let mut x = 0;
let mut i = 0;
let mut y: u64 = 0;
while x < max_range {
i = 0;
while i < max_range {
y = y + x * i;
i = i + 1;
}
x = x + 1;
}
println!("{:?}", sys_time.elapsed());
println!("The value of y is: {}", y);
}
➜ baka git:(master) ✗ cargo build --release
Finished release [optimized] target(s) in 0.0 secs
➜ baka git:(master) ✗ ./target/release/baka 20000
Ok(Duration { secs: 0, nanos: 6000 })
The value of y is: 39996000100000000
➜ baka git:(master) ✗ ./target/release/baka 40000
Ok(Duration { secs: 0, nanos: 12000 })
The value of y is: 639968000400000000
```
这里,Rust编译器可能也做了其他的优化了,但是需要分析asm再来看了,这里不做赘述。
但是,无论怎么看, 6000 ns (0.006ms) 和 200 ms 都是数量级的差距吧?
总结一点,不会别瞎说,这位 gopher 不行啊,深表同情。
有疑问加站长微信联系(非本文作者)
rust风化速度_反驳《Golang、Rust的执行速度的对照,让人大吃一惊。》——不会别瞎说...相关推荐
- 腐蚀rust服务器命令_【使用 Rust 写 Parser】2. 解析Redis协议
系列所有文章 https://zhuanlan.zhihu.com/p/115017849zhuanlan.zhihu.com https://zhuanlan.zhihu.com/p/139387 ...
- 笔记本玩rust卡顿_《腐蚀RUST》steam销量第一,延迟高用斧牛加速器!
本周Steam如期公布了上周(1月4日至1月10日)的游戏销量排行榜.本期排行榜中老游戏<腐蚀>凭借打折冲到榜首,七连冠的<赛博朋克2077>跌至第三名.凭借着促销的热度,&l ...
- rust的矿坑_转: Rust中的Pin详解 【Rust语言中文社区】
Rust中的Pin详解 原创 automanyang Rust语言中文社区 昨天 https://mp.weixin.qq.com/s/PjctbPbyR5OeaqTHZdB5uQ 相关概念 Pin ...
- python提高导入数据库速度_提高从MongoDB导入数据速度
Python编写爬虫,用的是Scrapy框架,将数据存储到了本机的MongoDB数据库上.导数据的时候发现数据的转化,速度有点慢. from pymongo import MongoClient #建 ...
- 怎么放慢音乐速度_为什么我的相机放慢速度或停止连拍?
怎么放慢音乐速度 Every camera has a burst mode: it's where you hold down the shutter button and it keeps tak ...
- python matlab 速度_关于python:MATLAB的速度是Numpy的两倍
我是一名工程学研究生,目前出于数值模拟的目的,正在从MATLAB过渡到Python.我的印象是,对于基本的数组操作,Numpy将与MATLAB一样快.但是,对于我编写的两个不同程序,MATLAB的运行 ...
- pcie1 4 速度_守门员丨门将的各种速度训练方法
"大家好,今天我们分享守门员的速度训练方法,希望大家喜欢! 比赛中,守门员在断球时要短而有力.扑救的效果在某种程度上取决于"速度".守门员在扑救或解围时,速度至关重要.当 ...
- 5g理论速度_严肃科普:5G的速度到底能有多快?
2020年已到.这一年正是国际电联5G愿景中的商用元年. 实际上,从2019年开始,5G的幼苗早已在欧美中日韩破土而出.今年,这批幼苗正在茁壮成长,并已在全球分蘖蔓延成燎原之势. 对于广大吃瓜群众来说 ...
- python和易语言爬虫速度_如何优化 Python 爬虫的速度?
在开发爬虫的时候,对于老工程师的工作节奏一般是先实现爬虫的抓取逻辑,然后就要提升爬取的效率了. 众所周知想提升效率就要涉猎到并发编程姿势啦,所以今天我们抛砖引玉,不去过多的计较太原理和抽象的东西,而是 ...
最新文章
- 【全网最精简】一行代码解决千万位以上的数字格式化为银行金额数字格式(如:¥1,000,000,000.00)
- Thorntail 2.2.0提供从WildFly Swarm自动迁移的特性
- 深入理解计算机系统 -资料整理 高清中文版_在所不辞的博客-CSDN博客_深入理解计算机系统第四版pdf
- Linux加密和安全
- Centos7 修改SSH 端口
- 进程间通信-system-v
- Scala集合实现WordCount单词统计代码
- mac上搭建vue环境及webstorm新建vue项目
- SAP CRM customer classfication debug
- gba徽章机器人_《徽章机器人》倒计时网站开启 20周年纪念插画欣赏
- 关于Unity中关节的使用(一)
- c语言敏感词屏蔽编程题,C#敏感词过滤实现方法
- python怎么把数据导入excel_如何把python中的数据导入excel
- python模拟鼠标点击和键盘输入的操作
- wstmall wstmart wstshop区别
- 个人开发者可以申请微信支付了
- mysql注入漏洞检查_漏洞检测:SQL注入漏洞 WASC Threat Classification
- 机器学习张志华讲的太太太好了
- 刘知远 | 语义表示学习
- Cocos Creator游戏引擎可以支持鼠标吗_Cocos Creator入门实战:桌球小游戏
热门文章
- 「CH2101」可达性统计 解题报告
- 学习总结5 - bootstrap学习记录1__安装
- module_param 用于动态开启/关闭 驱动打印信息
- ElastciSearch简单总结(笔记)
- iOS--数据存储NSUserDefaults
- cannot be deleted directly via the port API: has device owner network:floatingip
- 使用手机游戏的新闻推送
- C#写文本文件如何写入回车换行符?
- coverage.py - python 单元测试覆盖率统计工具
- 矩阵线性相关则矩阵行列式_搜索线性时间中的排序矩阵