Rust 语言从入门到实战
唐刚
Rust 语言中文社区联合创始人
5266 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 36 讲
Rust 语言从入门到实战
15
15
1.0x
00:00/00:00
登录|注册

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 的,你可以看我给出的这个例子。
// 我们定义foo1为一个异步函数
async fn foo1() -> u32 {
100u32
}
// 我需要在foo2函数中调用foo1,那么这个foo2也必需要是async函数
async fn foo2() -> u32 {
foo1().await
}
// 我需要在foo3函数中调用foo2,那么这个foo3也必需要是async函数
async fn foo3() -> u32 {
foo2().await
}
#[tokio::main]
async main() {
let num = foo3().await;
println!("{}", num);
}
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
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
立即购买
登录 后留言

全部留言(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归属地:北京
收起评论
显示
设置
留言
5
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部