Rust 并发编程实战课
晁岳攀(鸟窝)
前微博技术专家,知名微服务框架 rpcx 作者
575 人已学习
新⼈⾸单¥98
登录后,你可以任选4讲全文学习
课程目录
已更新 20 讲/共 38 讲
Rust 并发编程实战课
15
15
1.0x
00:00/00:00
登录|注册

18|双管齐下,两全其美:编写同时支持同步和异步的代码

你好,我是鸟窝。
在前几节课我们已经学习了 Rust 的异步编程的基本知识,以及第三方的异步运行时,这节课我们讨论作为一个库的开发者的困境:如何开始同时支持同步和异步的 SDK?

同步(阻塞)or 异步?

这个同步你可以看作是阻塞,并没有严格区分这两个概念的区别。
试想这么一个场景,你想为你的产品提供一个公共的 API,你需要把你的产品特性封装成供用户使用的 API,比如你开发了一个 NoSQL 数据库,需要提供给用户调用的 API。一般情况下,或者几年前,我们认为这是一件很简单的事情,正常把一个个特性实现为对应的 API 即可。
但是,async/.await 编程模式突然出现了,这股风潮以及它带来的遍历让你不禁想实现一个异步的 API。因为操作数据库涉及大量 I/O 操作,使用异步编程看起来是合理的。
现在,你不得不维护两套代码,一套是同步的代码,一套是异步的代码,这些代码底层的业务逻辑又是类似的,如何有效地同时提供同步和异步的代码呢?这也是 Mario Ortiz Manero 在开发 rspotify 这个库时遇到的困境以及一些总结,这给了我很多的启发,所以我专门单列一节课,结合我的一些经验来介绍它,毕竟有可能我们的一部分工作就是要开发各种 crate,这样就会遇到类似的问题。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
  • 解释
  • 总结

1. 方案一:复制相同的代码,但存在代码重复和维护成本高的问题 2. 方案二:基于异步代码实现同步代码,但存在初始化运行时的开销和重复代码问题 3. 方案三:使用 `remove-async-await` 宏自动生成同步代码,简化同时提供异步和同步的代码 4. 方案四:使用 `maybe_async` 库根据开关生成同步和异步代码,遵循“优先使用异步”的策略 5. `maybe_async` 提供的统一特性开关和属性宏,以及其用法 6. `remove-async-await` 宏的使用和好处 7. `maybe_async` 属性的三种用法 8. 通过宏的方式简化同时提供异步和同步的代码的实现 9. Winter `maybe-async` 库提供的 `maybe_async`、`maybe_await` 和 `maybe_async_trait` 宏,能够让你在同步和异步代码之间无缝切换 10. 解决同时支持同步和异步的代码开发中的问题和挑战

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Rust 并发编程实战课》
新⼈⾸单¥98
立即购买
登录 后留言

精选留言

由作者筛选后的优质留言将会公开显示,欢迎踊跃留言。
收起评论
显示
设置
留言
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部