ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Pin 与 Tokio:先分清地址稳定和任务调度

Pin 与 Tokio:先分清地址稳定和任务调度 Pin 与 Tokio先分清地址稳定和任务调度Pin经常和异步运行时一起出现但两者解决的不是同一问题。Tokio 负责调度 futurePin约束某个值在被固定后不能再通过安全方式移动。把概念混在一起接口很容易过度设计。Future 为什么需要 Pinasync状态机可能包含跨await保存的内部状态。对于!Unpin类型调用poll时需要Pinmut Self这样实现可以依赖地址稳定性。多数业务代码通过.await使用 future不需要手写 pin 操作。工具与上下文各自负责什么运行时负责唤醒和调度取消通过丢弃 future 发生业务上下文保存请求状态、超时与资源所有权。阻塞计算不应直接放进异步任务热路径应使用专门的阻塞执行机制并限制并发。接口避免泄漏底层细节调用方只需要知道任务是否可取消、错误如何返回和资源何时释放。除非库本身构建自引用结构或手写 Future否则不必把Pin暴露到每层业务接口。理解地址稳定之后Pin并不神秘。先写清生命周期与取消语义再选择运行时工具代码会自然很多。
返回列表