17|tokio编程: Rust异步编程还有哪些需要注意的点?
唐刚
你好,我是 Mike。前面几节课,我们学习了 Rust 异步编程和 tokio 的基础知识,我们先来简单回顾下。
async/.await 语法
tokio 基本概念和组件
使用 tokio 编写一个网络并发应用
使用 Arc 和 Mutex 在多个 task 之间共享数据
在并发 task 之间使用 Channel 传递数据
通过学习这些内容,你应该已经能使用 tokio 开发 Rust 异步并发应用了。这节课,我们对 Rust 异步并发相关的知识点来做一点补遗。
async 其他知识点
Rust 代码中的 async 函数,其实和 Rust 的普通函数是不相容的。async Rust 就好像是 Rust 语言里的一个独立王国。
async 代码的传染性
Rust async 代码具有传染性。前面我们给出了使用 async/.await 的两条规则。
async 函数或 block 只有被 .await 后才被驱动。
.await 只能在 async 函数或 block 中使用。
这就导致在业务代码中(非 tokio 那个顶层 Runtime 代码),如果你需要调用一个 async 函数,那么你也需要让你现在这个调用者函数也是 async 的,你可以看我给出的这个例子。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
Rust异步编程和tokio的基础知识已经掌握,但在实际工作中,异步代码与同步代码混合使用时需要注意。异步代码具有传染性,调用async函数需要保证调用者函数也是async的。在异步环境中执行同步代码时,可以使用`task::spawn_blocking()`函数来避免阻塞系统线程。而在同步环境中执行异步代码,则需要手动使用`block_on`来执行异步代码。Rust的async实现采用无栈协程方案,通过状态机和poll机制来实现`async/.await`语法。值得注意的是,目前在trait中不能定义async方法,但可以使用`async_trait`宏来解决这个问题。总的来说,Rust的异步并发能力处于不断发展中,需要关注最新的变化。异步编程对于高性能高并发服务至关重要,因此对于Web后端服务开发来说,继续学习基于tokio的内容是必要的。文章内容丰富,深入浅出,对于想要深入了解Rust异步编程的读者来说是一份不错的参考资料。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Rust 语言从入门到实战》,新⼈⾸单¥59
《Rust 语言从入门到实战》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(5)
- 最新
- 精选
- $侯老师,新的1.75是不是支持asnyc trait了
作者回复: 对的,已经支持了
2023-12-31归属地:浙江2 - Geek_e72251期待axum的实战
作者回复: 好讷
2023-11-28归属地:广东 - Michael等了一个周末就7分钟的课程,而且最近几节将tokio的内容相对有点不充实,既然是进阶篇,异步这一块把 Future、Executor 的实现原理带着分析下。
作者回复: 这个课程定位问题,对于很多业务语言过来的同学,暂时不需要了解那些东西的。另外一方面,网上已经有很多资料讲解那些了,可以去搜搜看。
2023-11-27归属地:中国香港2 - 不忘初心每天能更新一节就好了, 隔天更新拖的时间太长了
作者回复: 哈哈,压力山大
2023-11-27归属地:四川 - 伯阳期待老师的实战课程
作者回复: 好的好的。正在✍️
2023-11-27归属地:北京
收起评论