面试题答案
一键面试在Rust异步网络I/O中,Future
代表一个异步计算的结果,它定义了异步操作的逻辑。Poll
是用于驱动Future
执行的机制。
Future
需要实现Poll
方法,该方法由执行者(如Executor
)调用,以尝试推进异步操作。
Poll::Pending
和Poll::Ready
的含义如下:
Poll::Pending
:表示Future
尚未准备好产生结果,异步操作还在进行中。执行者应该在未来某个时间点再次轮询该Future
。在网络I/O场景下,通常在以下情况返回:- 当等待网络数据可读或可写时,比如调用
TcpStream::read
或write
方法,而当前连接还没有数据可读或没有可写空间时,对应的Future
实现会返回Poll::Pending
,等待网络事件发生。 - 当需要等待其他异步操作完成,例如等待另一个
Future
执行完毕,当前Future
会返回Poll::Pending
。
- 当等待网络数据可读或可写时,比如调用
Poll::Ready
:表示Future
已经完成,并且可以获取计算结果。在网络I/O场景下,当read
操作成功读取到数据,或者write
操作成功将数据写入网络连接时,对应的Future
实现会返回Poll::Ready
并携带操作结果(如读取到的数据量或写入的数据量)。