异步 Rust 是关于并发的,而不仅仅是性能

主要观点async/await的主要好处是能简洁表达复杂并发,性能提升只是次要效果,应主要根据其简化代码的程度来评判,而非速度。
关键信息

  • Rust 引入async/await是为实现用户空间的高性能并发,很多人认为性能提升是其主要原因,但作者认为主要动机是优雅表达和组合并发过程。
  • async/await能简单表达复杂并发场景,如超时、周期性活动、暂停未来等,其Future合约和select!等机制很有用,但也带来一些权衡和问题。
  • 不使用async/await的原因包括复杂性、潜在问题(如Future实现、取消安全等)、缺失部分(如异步迭代器等),但作者认为单线程执行器可避免一些问题,且认为async/await有价值。
  • 替代async/await的方法有使用手动事件循环、CSP(通过消息传递的分离进程)、其他语言或线程结合阻塞 I/O,但都存在问题,不如async/await易用和能表达复杂并发模式。
    重要细节
  • async/await中,可通过简单代码实现超时操作,利用Future可取消和外部驱动的特性,能与各种Future组合,实现松散耦合。
  • HyperQueue的示例中,async用于在等待接收事件时进行周期性活动,还可暂停未来以避免潜在的竞争条件。
  • 不使用async/await的替代方法中,手动事件循环代码冗长易错,CSP 是互补方式而非替代,其他语言有各自优缺点,线程结合阻塞 I/O 存在可扩展性、接口复杂、失去控制等问题。
  • 用阻塞 I/O 和线程实现超时示例时,存在实现复杂、难以扩展、需在 I/O 操作中添加超时知识、线程仍会阻塞等问题,用通道实现也有不足,需考虑取消机制等。
阅读 8
0 条评论