几个问题:
1、同样的一段代码,放在异步中,运行速度会如何?
2、什么情况下异步并没有改变运行速度?
3、如何提升异步的速度?

toml:

[dependencies]
tokio = { version = "1", features = ["full"] }
futures = "0.3.4"

代码:

use std::time::{Duration, Instant};
use std::thread;
use tokio::time;
const N:i32 =1000000;
struct bar{price :f64,code: Option<String>,close: f64,open:f64,high:f64,low:f64,
}
impl bar{fn default()->Self{bar{price:0.0,code :Some(String::from("I AM NULL")),close:0.0,open:0.0,high:0.0,low:0.0,}}fn push_vec(n:i32)->Vec<Self>{let mut v = vec![];for _ in 0..N{v.push(bar::default());}v}
}fn hello(){let v = bar::push_vec(N);println!("sync hello world ! v length :{:?}",v.len());
}async fn async_hello(){let v = bar::push_vec(N);println!("async hello world ! v length :{:?}",v.len());
}
// 同步sleep
async fn sync_time_01() {std::thread::sleep(time::Duration::from_secs(1));//同步sleep
}
async fn sync_time_02() {std::thread::sleep(time::Duration::from_secs(1))//同步sleep
}
// 异步sleep
async fn async_time_01() {tokio::time::sleep(Duration::from_secs(1)).await;//异步sleep
}
async fn async_time_02() {tokio::time::sleep(Duration::from_secs(1)).await;//异步sleep
}
async fn sync_do() {async_hello().await;tokio::join!(sync_time_01(),sync_time_02());// 并行跑println!("sync_do is over!")
}async fn async_do() {async_hello().await;tokio::join!(async_time_01(),async_time_02(),async_time_01(),async_time_02());//并行跑println!("async_do is over!")
}#[tokio::main]
async fn main() {let start_0 = Instant::now();hello();println!("hello cost miliseconds[毫秒] : {}", start_0.elapsed().as_millis());let start_1 = Instant::now();async_hello().await;println!("async_hello cost miliseconds[毫秒] : {}", start_1.elapsed().as_millis());let start_2 = Instant::now();sync_do().await;println!("sync_do cost miliseconds[毫秒] : {}", start_2.elapsed().as_millis());let start_3 = Instant::now();async_do().await;println!("async_do cost miliseconds[毫秒] : {}", start_3.elapsed().as_millis());}

ouput:

Finished release [optimized] target(s) in 2.08sRunning `target/release/test_trait`
sync hello world ! v length :1000000
hello cost miliseconds[毫秒] : 179
async hello world ! v length :1000000
async_hello cost miliseconds[毫秒] : 148
async hello world ! v length :1000000
sync_do is over!
sync_do cost miliseconds[毫秒] : 2137
async hello world ! v length :1000000
async_do is over!
async_do cost miliseconds[毫秒] : 1143

你能得出什么结论么?
(1)同一段代码(同步),放在异步中,花时间是一样的。尽管上面的数据好象异步更少,其实是一样的。
(2)异步要用并行。

Rust: tokio,异步代码与运行速度初探相关推荐

  1. 【Rust 日报】2022-04-10 适用于Rust的异步CQL驱动

    scylla-rust-driver:适用于 Rust 的异步 CQL 驱动程序 这是 ScyllaDB 的客户端驱动程序,用纯 Rust 编写,使用 Tokio 实现完全异步 API.尽管针对 Sc ...

  2. fastapi python 并发_FastAPI 异步代码、并发和并行

    作者:麦克煎蛋   出处:https://www.cnblogs.com/mazhiyong/ 转载请保留这段声明,谢谢! 我们这里探讨下关于异步代码.并行和并发的一些概念. 一.初探 1.如果我们使 ...

  3. 【青少年编程】【答疑】控制Scratch异步代码的执行顺序

    问题 几天前,我写了一篇图文 对「等待(0)秒」的理解,发现可以利用「等待(0)秒」这个积木块来解决Scratch中异步代码的执行顺序问题,即点击绿旗后可以控制多个角色中响应该事件的代码的顺序. 在这 ...

  4. SAP HUM事务代码 HUMAT 之初探

    SAP HUM事务代码 HUMAT 之初探 SAP菜单中,该事务代码在这里: 1)如下的inbound delivery号码, Document flow, 已经完成了PGR, 2)执行HUMAT,进 ...

  5. 用Async函数简化异步代码

    Promise 在 JavaScript 上发布之初就在互联网上流行了起来 - 它们帮开发人员摆脱了回调地狱,解决了在很多地方困扰 JavaScript 开发者的异步问题.但 Promises 也远非 ...

  6. 优化:更优雅的异步代码?

    异步问题 回调地狱 异步编程中最常见的一种问题便是回调地狱. 单次ajax请求有多个回调响应 $.ajax({type: 'get',url: '/path/to/calldata',success: ...

  7. 使用FakeAsync对Angular异步代码进行单元测试

    The problem with async is that we still have to introduce real waiting in our tests, and this can ma ...

  8. 同步代码和异步代码_告别异步代码

    同步代码和异步代码 Quasar是一个将真正的轻量级线程(纤维)添加到JVM的库. 它们非常便宜且非常快-实际上,光纤的行为就像Erlang进程或Go goroutines-并允许您编写简单的阻塞代码 ...

  9. google android广告异步加载,谷歌广告异步代码和同步代码的解决方法

    通常大部分人初次接触谷歌google adsense广告联盟都会有疑问,在新建单元界面我们可以看到获取代码类型选项.下面是学习啦小编为大家整理的关于谷歌广告异步代码和同步代码的解决方法,一起来看看吧! ...

  10. 使用 Async / Await 来编写简明的异步代码

    原文链接:https://blog.patricktriest.com/what-is-async-await-why-should-you-care/ 复制代码 停止书写回调函数并爱上ES8 以前, ...

最新文章

  1. ios3怎么取消长按弹出菜单_苹果:iOS13取消3D-Touch重压改为长按只是个BUG~
  2. flutter中的异步机制Future
  3. [openjudge] 2797最短前缀 Trie
  4. 设计模式之行为模式(1)-状态、策略、责任链、访问者
  5. 分布式日志平台--ELKStack实践
  6. git21天打卡day20-合并分支
  7. USACO Section 1.1 : Greedy Gift Givers
  8. 《解读量化投资:西蒙斯用公式打败市的故事》内容简介及PDF下载
  9. 老罗锤子手机公布会,我感到深深地愧疚
  10. python黑白棋 pygame_python使用minimax算法实现五子棋
  11. Aspose.Total 企业案例:MiniTool 使用 Aspose.Total API 将文档预览、渲染和转换为 TIFF、PDF 等格式
  12. 中间表是什么?和报表有什么关系?会带来怎样的问题?又如何解决?
  13. 安卓眼球追踪_研究者开发AI眼球追踪系统 智能手机都能用
  14. UG NX二次开发(C#)-装配-添加组件AddComponent
  15. nginx 过滤ip
  16. 校园网同时连手机和电脑、用数据线给电脑连网
  17. android 9闪屏,android 9图片制作 显示会出现闪屏怎么处理
  18. 天正当前比例怎么设置_天正模型空间怎么设置(天正7图纸空间中如何改变当前比例)...
  19. CSS水平居中与垂直居中
  20. 抑郁男子怀揣妻女照片坚强生存25天

热门文章

  1. 阿里巴巴正式开源全球化OpenMessaging和ApsaraCache项目
  2. [25年后的统计系会是什么样?
  3. CHIL-SQL-服务器 - RDBMS
  4. OPENCV与OPENCL
  5. 双线adsl负载均衡配置过程
  6. 微软软件基地落户广州
  7. OC基础(一)——从C开始初步了解OC
  8. python 爬取历史天气
  9. FluentValidation:一个非常受欢迎的,用于构建强类型验证规则的.NET 库
  10. wordpress靶机快速搭建