一,Isolate的理解
Isolate可以理解为dart中的线程,但它又不同于线程,准确的说应该叫做协程,协程最大的优势就是它具有极高的执行效率,因为协程中子程序的调用不需要线程的切换,所以对于线程数量越大的程序来说协程的优势就越明显。每个isolate都有自己独立的执行线程和事件循环,以及内存,所以isolate之间不存在锁竞争的问题,各isolate之间通过消息通信。

二,单线程设计的目的
移动端页面(包含Android、iOS、Web)构建的特性—树形结构构建布局、布局解析抽象、绘制、渲染,这一系列的复杂步骤导致必须在同一个线程完成。因为多线程操作页面UI元素会有并发的问题,有并发就必须要加锁,加锁就会降低执行效率。所以强制在同一线程中操作UI是最好的选择。
在Flutter中,为了达到设计目的,采取隔离设计去掉锁的应用,锁去掉后,线程间的信息通信需要建立通信机制来完成,开发者面对的只有一个主Isolate,在Isolate中可以通过事件队列来实现异步(网络请求、文件IO)等。
三,Isolate的本质
1,Isolate的组成
在Dart中每一个线程叫做Isolate,每一个isolate中包含一个event loop(事件循环),event queue和microtask queue两个事件队列。
-
Stack用于存放函数调用上下文和调用链路信息
-
Heap用于存放对象,堆内存回收管理和java类似。
-
Queue用于存放异步回调,分为微事件队列(MicroTaskQueue: 其事件的优先级比event queue高,可

本文详细探讨了Dart中的Isolate概念,它是协程而非传统线程,强调了在Flutter中单线程设计的必要性。文章介绍了Isolate的组成、底层实现、内存隔离策略、通信机制以及Isolate的创建、使用和生命周期管理。
1412

被折叠的 条评论
为什么被折叠?



