flutter 多线程

2019-06-21  本文已影响0人  liboxiang

https://juejin.im/post/5cc311695188252e83434aba

协程

async、await本质上就是协程的一种语法糖
协程分为无线协程和有线协程,无线协程在离开当前调用位置时,会将当前变量放在堆区,当再次回到当前位置时,还会继续从堆区中获取到变量。有线协程则会将变量继续保存在栈区,在回到指针指向的离开位置时,会继续从栈中取出调用。async、await就属于无线协程的一种

async、await原理

以async、await为例,协程在执行时,执行到async则表示进入一个协程,会同步执行async的代码块。async的代码块本质上也相当于一个函数,并且有自己的上下文环境。当执行到await时,则表示有任务需要等待,CPU则去调度执行其他IO,也就是后面的代码或其他协程代码。过一段时间CPU就会轮询一次,看某个协程是否任务已经处理完成,有返回结果可以被继续执行,如果可以被继续执行的话,则会沿着上次离开时指针指向的位置继续执行,也就是await标志的位置。

Future的执行顺序由加入事件循环队列的顺序决定

Dart的事件循环和异步操作

https://dart.dev/articles/archive/event-loop

两种事件队列

both-queues.png
Future与两种事件队列的关系
上一篇 下一篇

猜你喜欢

热点阅读