pyList

async/await 使用场景简析

简单说, async 用于申明一个 function 是异步的;而 await 则可以认为是 async await 的简写形式,是等待一个异步方法执行完成的。他们的应用场合是什么?

快速理解:同步、异步、多线程

async/await

  • 同步方法:调用时需要等待返回结果,才可以继续往下执行业务
  • 异步方法:调用时无须等待返回结果,可以继续往下执行业务
  • 开启新线程:在主线程之外开启一个新的线程去执行业务
  • 同步方法和异步方法的本质区别: 调用时是否需要等待返回结果才能继续执行业务

使用场合

理解后可以对号入座, async 是异步, await 是同步。考虑到程序的性能,一般多文件操作或者多任务操作会使用异步,但对本地文件操作其实很难会出现 IO 的瓶颈,所以一般 async 都是用于网络请求。

还有一点需要注意,async/await 并不是开启新的线程,它只是一种状态机,暂时退出当前场景,当监听到有新状态时就恢复上下文。如果是 CPU 消耗型的功能,比如大的图像处理,就不要使用异步,而是考虑多线程或多进程。golang 的 goroutine 在启动新线程方面做得很简洁。

权衡利弊

代码可读性、代码性能往往不能同时拥有,使用 async/await 也存在可读性与性能的问题,在实际使用中应该折中考虑,找到较好结合点。

本文标签: 同步 异步
本文网址: https://pylist.com/t/1571668573 (转载注明出处)
如果你有任何建议或疑问可以在下面 留言
发表第一条评论!
验证码图片
相关推荐