简单说, async 用于申明一个 function 是异步的;而 await 则可以认为是 async await 的简写形式,是等待一个异步方法执行完成的。他们的应用场合是什么?
快速理解:同步、异步、多线程
- 同步方法:调用时需要等待返回结果,才可以继续往下执行业务
- 异步方法:调用时无须等待返回结果,可以继续往下执行业务
- 开启新线程:在主线程之外开启一个新的线程去执行业务
- 同步方法和异步方法的本质区别: 调用时是否需要等待返回结果才能继续执行业务
使用场合
理解后可以对号入座, async 是异步, await 是同步。考虑到程序的性能,一般多文件操作或者多任务操作会使用异步,但对本地文件操作其实很难会出现 IO 的瓶颈,所以一般 async 都是用于网络请求。
还有一点需要注意,async/await
并不是开启新的线程,它只是一种状态机,暂时退出当前场景,当监听到有新状态时就恢复上下文。如果是 CPU 消耗型的功能,比如大的图像处理,就不要使用异步,而是考虑多线程或多进程。golang 的 goroutine
在启动新线程方面做得很简洁。
权衡利弊
代码可读性、代码性能往往不能同时拥有,使用 async/await
也存在可读性与性能的问题,在实际使用中应该折中考虑,找到较好结合点。
本文网址: https://pylist.com/topic/189.html 转摘请注明来源