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。
➡️