async runtime问题

💡 原文中文,约1200字,阅读约需3分钟。
📝

内容提要

文章介绍了作者学习Rust的async runtime的过程,尝试抽象出Future的概念,但是遇到了管理带不同关联类型Output的Future的问题。作者提到了JoinHandle可以解决Future没有Output类型的限制,但是Task的定义需要使用unsafe代码。

🎯

关键要点

  • 作者学习Rust的async runtime,尝试抽象Future的概念。
  • 使用C语言的epoll实现简单的echo服务,并计划移植到Rust的mio库上。
  • 定义了自己的Future,存在与标准库Future的三个区别:未使用Pin、未使用Context、无返回值Output。
  • 在没有Output的情况下,维护task列表的定义存在问题,无法将不同类型返回值的Future放入同一列表。
  • 参考async-task源码,发现JoinHandle解决了Future没有Output类型的限制。
  • Task的定义涉及unsafe代码,手动操作内存,类似C语言风格。
  • 提出问题:如何管理带不同关联类型Output的Future,是否必须使用unsafe代码?
  • 认为Rust的async runtime比C语言的libev库难度更高,普通程序员使用async/await不需了解runtime。
➡️

继续阅读