Future Trait
Future
是rust异步的核心,代表一个将来会产生值的一个东东。调用poll
方法可以让future朝着完成进行,如果完成了就返回Pool::Ready(result),否则返回Poll::Pending
并加到事件循环队列中等待再次被wake
方法调用。
Waker
Waker有一个wake()方法,用来告诉执行器需要执行相关的任务,就会调用相关的poll方法。
Executor
rust的future都是懒执行的,就是说除非用主动推动完成才会完成,否则不会做任何事。一个推动future完成的方法是在async方法中用.await
,但最外层的future如何完成呢?这就需要一个Future executor
。
Executor通过调用poll
方法执行一系列最外层的future。典型的,一旦一个future开始了,Executor就会对之调用poll方法。当future暗示他们准备好了被调用wake()更进一步,他们就会被放到队列中等待再次被poll,不断重复直至完成。
先看看Executor的定义:
struct Executor {
ready_queue: Receiver<Arc<Task>>
}
网友评论