Day 24非同步程序设计

前言
非同步程序设计基本上就是没有等待或非阻塞程序的设计模型,在Flutter中,非同步是用Future来修饰并执行在event loop内,可有效防止网路对UI绘制的影响。

isolate
(一) 介绍
isolate是透过Flutter Engine的执行绪来实现,而这个执行绪则是由Flutter管理并建立。所有的Dart语言都是在isolate上执行的,应用程序启动後,开始执行main函式并执行main isolate。isolate有自己的记忆体位址和event loop,但要注意,多个isolate无法共用记忆体,必须透过API通讯才可以。每个isolate包含一个事件回圈和两个事件伫列,分别是microTask queue和event queue。

(二)事件回圈event loop
https://ithelp.ithome.com.tw/upload/images/20211006/20140524JsuGQlLFBp.png
我们用这张图来解释程序运作的原理,一共分为四个步骤。
1.启动App并执行main方法。
2.启动event loop,并执行伫列中的任务直到microtask queue为空,每次都是依照先进先出的原则处理。
3.确定microtask queue为空後,开始处理event loop,一样是依照先进先出的原则,直到event queue为空。
4. microtask queue和event queue都为空後,就可退出App。

(三)执行绪模型
前面所提到的Flutter Engine其实是由embedder所负责,embedder是平台引擎移植的中间层程序,总共提供四种Task Runner。
下图是Flutter Engine的执行架构。
https://ithelp.ithome.com.tw/upload/images/20211006/20140524joO6kDrdfA.jpg

•UI Task Runner:负责执行在执行绪对应到平台的执行绪上,为子执行绪。
•GPU Task Runner:用於执行与装置GPU相关的呼叫,将UI Task Runner产生的Layer Tree提供的资讯转成GPU指令。
•IO Task Runner:同样属於子执行绪,负责预先处理一些读取操作,避免卡顿。
•Platform Task Runner:这是Flutter Engine中的主Task Runner,不仅可以处理与Engine的互动,还可以处理来自Android/iOS的互动。

(四)如何建立isolate?
透过isolate.spawn建立一个isolate。
https://ithelp.ithome.com.tw/upload/images/20211006/20140524sSqEUP66d7.png

今天介绍了很多东西,希望对大家有帮助,明天将会介绍路由,敬请期待。

参考资料
横跨Android及Apple的神话:用Dart语言神启Flutter大业6.5节
https://ithelp.ithome.com.tw/articles/10233915
https://iter01.com/601637.html
https://iter01.com/160524.html
https://ithelp.ithome.com.tw/articles/10243766
https://iter01.com/441301.html


<<:  Flutter体验 Day 28-flame JoystickComponent

>>:  自动化测试,让你上班拥有一杯咖啡的时间 | Day 22 - 与 JS-alert, confirm, prompt 如何互动

Day31:HTML(29) form(8)

输入类型"周" 将”input type="week"“允许...

资料结构与演算法

** 这主题博大精深这里先进行初步的介绍** 资料结构 资料结构可以想像成容器,每个物品都有适合放置...

DAY13:Fragment片段之实作

今天,要来产生Fragment。 首先按File再点选 Kotlin Class/File 接着取名...

学习Python纪录Day28 - 在多文字档中搜寻关键字

在多文字档中搜寻关键字 第一层for回圈使用了os.walk()递回取得路径下的所有档案 第二层fo...

CSS微动画 - 卡片简约动态效果,低调的小心机

Q: 剩下 5 篇来点实用也不实用的范例吧~~ A: 毕竟效果还是要看设计的美感,这是很看天份的(...