Rust的异步机制

本文介绍了Rust异步编程中的核心概念:Future、Reactor和Executor。Future作为未完成计算的任务,具有完备性和有状态特性;Reactor作为传达者,负责事件监听和通知;Executor则负责Future的调度。通过一个生动的故事展示了异步执行的流程。
摘要由CSDN通过智能技术生成

先来了解一下几个重要的概念:

Future

这是Rust异步的核心,但是也是定义最简短的, 官方对它的定义是一个可能还没有完成的计算值,有了它,线程可以在等待它计算完成的同时去做其他的事情。它的表现形式就是一个只有一个方法的trait, 这个方法叫poll,根本目的是为了向调用者报告自己的状态, 状态就两种Ready和Pending, 前者说明已经计算完成了, 后者是说别着急,还在算着。其实在我看来,这定义还是有些抽象, 把Future说成是一个任务我觉得更为贴切, 这个任务有以下两个特点(自己总结的, 不保证准确,欢迎补充) :

1. 完备性。任务在生成的时候就包含了所有与任务本身有关的要素,所以它可以作为一个整体在线程之间进行迁移, 也就是说活已经安排的妥妥当当了, 就差执行任务的人了,也就是线程。而且我这个任务不挑嘴, 完成一半中途换人也是可以接受的。

2. 有状态。任务不像常规的函数或者方法,对它的调用不是阻塞的, 也就是说调用者不必一直等到任务的最终结果为止, 控制权可以中途从任务返回到调用者, 然后在适当的时候再回到任务中, 而且所返回的位置都是有记录的,再次进入任务的时候不必从头开始, 而是直接回到上次返回的那个位置继续剩余的工作。这里需要注意的是中途返回的时候是没法稍带返回值给调用者的, 返回的状态只能是Pending, 借以告诉调用者我的工作还没有完成,请晚些时候再来。只有最终完成的时候才可以把最终结果以Ready(Val)的形式返回出去。所以我们完全可以把任务看成是一个只有两种状态的有限状态机。

 

Reactor

这个概念是最模糊的,查了一些资料,最终也没找到一个合适的具像的解释。有的就直接把它定义为一个资源(resource),

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值