美文网首页
flutter 多线程

flutter 多线程

作者: liboxiang | 来源:发表于2019-06-21 16:48 被阅读0次

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与两种事件队列的关系
  • 传递给Future的then()方法的函数在Future完成时立即执行。(该函数未入队,只是被调用。)
  • 如果在调用then之前已经完成了Future ,那么就会在Microtask队列中添加一个任务,该任务执行传递给then()的函数。
  • Future()和Future.delayed()创建的Future不立即完成; 任务被添加到Event队列。
  • 所述Future.value()生成的Future在microtask队列中执行。
  • 该Future.sync()构造函数立即执行其功能参数(除非该函数返回一个Future),在microtask队列。

相关文章

  • flutter记录

    Flutter技术和开发流程参考 dart Get Started dart pad 多线程 Flutter Ge...

  • 2020 下半年计划

    学习享学课堂 (包括Flutter 、小程序、kotlin等新知识) 具体计划:5月:搞清楚多线程:编写多线程系...

  • Flutter 异步编程

    由于Flutter是单线程的,所以java或原生的coder不要认为flutter的异步是多线程 了解java和j...

  • flutter 多线程

    https://juejin.im/post/5cc311695188252e83434aba 协程 async、...

  • 面试总结 优化

    1.Flutter的setState2.dart的多线程dart的多线程3.java线程池io密集型和Cpu密集型...

  • Flutter 之多线程

    首先声明Dart是单线程语言,也就是说它没有像OC、Swift 那样复杂的多线程控制。也就可以理解为 Dart只有...

  • 深入理解Flutter多线程

    深入理解Flutter多线程[https://www.jianshu.com/p/54da18ed1a9e]Flu...

  • Flutter - Dart中的异步编程及多线程

    Flutter - Dart中的异步编程及多线程 前言 生命在于不断学习,探索未知的世界!!! 今天我们将从Fut...

  • Flutter -- 10.多线程

    Dart中的多线程 Dart中多线程不仅仅是多线程,更像一个进程。拥有独立的内存空间,不存在资源抢夺的问题,因此也...

  • 深入理解Flutter多线程

    Flutter默认是单线程任务处理的,如果不开启新的线程,任务默认在主线程中处理。 事件队列 和iOS应用很像,在...

网友评论

      本文标题:flutter 多线程

      本文链接:https://www.haomeiwen.com/subject/zjbnfctx.html