Rust 异步编程
一、异步编程介绍
- 有两种方式调用异步函数,一种是
block_on(),另一种是await。
block_on() 函数会阻塞,不会继续向下执行。
在异步函数中执行异步操作需要用
await来 “激活” 该函数,因为Future本身不会自己做任何事,它是一个惰性函数,需要被调用才能执行。
在异步函数或异步块中,通过await来执行,在非异步函数中通过执行器的block_on()来执行。用
sleep()阻塞某个函数,但是线程并不会切换到另一个函数执行。因为使用的sleep()函数是标准库中的函数,我们应该使用异步包中的函数,例如tokio、async-std、futures的crate。在这些库中,实现了executor、reactor等功能,也实现了sleep()等函数。
原因:
Future会返回Ready或Pending两种状态,当一个函数执行完会通知Reactor,然后Reactor通知executor。