Flutter中并发的实现与理解

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

一,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高,可

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值