继续 Dart 异步编程系列的第二篇,上一篇我们说到了 Dart 中的 EventLoop(事件循环)。我们知道了 Dart 是单线程模型,也就是实现异步需要借助 EventLoop 来进行事件驱动。

所以 Dart 只有一个主线程,其实在 Dart 中并不是叫 Thread,而是有个专门名词叫 isolate(隔离)。其实在 Dart 也会遇到一些耗时计算的任务,不建议把任务放在主 isolate 中,否则容易造成 UI 卡顿,需要开辟一个单独 isolate 来独立执行耗时任务,然后通过消息机制把最终计算结果发送给主 isolate 实现 UI 的更新。在 Dart 中异步是并发方案的基础,Dart 支持单个和多个 isolate 中的异步。

1. 为什么需要 isolate

在 Dart/Flutter 应用程序启动时,会启动一个主线程其实也就是 Root Isolate,在 Root Isolate 内部运行一个 EventLoop 事件循环。所以所有的 Dart 代码都是运行在 Isolate 之中的,它就像是机器上的一个小空间,具有自己的私有内存块和一个运行事件循环的单个线程。isolate 是提供了 Dart/Flutter 程序运行环境,包括所需的内存以及事件循环 EventLoop 对事件队列和微任务队列的处理。来张图理解下 Root Isolate 在 Flutter 应用程序中所处作用:

2. 什么是 isolate

用官方文档中定义一句话来概括:

An isolated Dart execution

异步编程之 Isolate相关推荐

  1. Dart 异步编程之 Isolate 和事件循环

    尽管 Dart 是个单线程任务,但它提供 Future.Stream.后台任务以及其他特性用于编写现代异步程序以及响应式程序(Flutter).本文讲的是 Dart 后台任务的基础:Isolate 和 ...

  2. 异步编程之Promise(2):探究原理

    异步编程系列教程: (翻译)异步编程之Promise(1)--初见魅力 异步编程之Promise(2):探究原理 异步编程之Promise(3):拓展进阶 异步编程之Generator(1)--领略魅 ...

  3. python3 sleep 并发_python异步编程之asyncio(百万并发)

    点击上方蓝字关注我们 目录 [python 异步编程之 asyncio(百万并发)] 一.asyncio 二.aiohttp 前言:python 由于 GIL(全局锁)的存在,不能发挥多核的优势,其性 ...

  4. pythonasyncio并发编程实战_python异步编程之asyncio(百万并发)

    [python异步编程之asyncio(百万并发)] 前言:python由于GIL(全局锁)的存在,不能发挥多核的优势,其性能一直饱受诟病.然而在IO密集型的网络编程里,异步处理比同步处理能提升成百上 ...

  5. JS异步编程之callback

    为什么 JS 是单线程? 众所周知,Javascript 语言的执行环境是"单线程"(single thread). 所谓"单线程",就是指一次只能完成一件任务 ...

  6. ES6 异步编程之二:Promise

    异步回调的泥潭 异步回调是最直接的异步结果处理模式,将一个回调函数callback扔进异步处理函数中,当异步处理获得结果之后再调用这个回调函数就可以继续之后的处理,但是如果这个callback又是一个 ...

  7. ASP.NET Core Web 应用程序系列(四)- ASP.NET Core 异步编程之async await

    PS:异步编程的本质就是新开任务线程来处理. 约定:异步的方法名均以Async结尾. 实际上呢,异步编程就是通过Task.Run()来实现的. 了解线程的人都知道,新开一个线程来处理事务这个很常见,但 ...

  8. python异步asy_Python 异步编程之asyncio【转载】

    一.协程的认识 协程(Coroutine),也可以被称为微线程,是一种用户态内的上下文切换技术. 简而言之,其实就是通过一个线程实现代码块相互切换执行.例如:deffunc1():print(1) . ...

  9. Node.js 异步编程之 Callback介绍

    原文:http://www.jb51.net/article/63070.htm ------------------------------------- Node.js 基于 JavaScript ...

  10. 前端异步编程之Promise和async的用法

    传统的异步解决方案采用回调函数和事件监听的方式,而这里主要记录两种异步编程的新方案: ES6的新语法Promise ES2017引入的async函数 Generator函数(略) Promise的含义 ...

最新文章

  1. Red5安装与入门 与FMS配置
  2. 作为项目经理,如何处理好与不同类型客户之间的关系?
  3. QT调用C#写的Dll
  4. #串口通信超时处理_实现4G无线通信透传的远程通信多组网5个PLC相互交换数据...
  5. 【算法导论】学习笔记——第11章 散列表
  6. Java背景颜色怎么设成随机的_JS实现随机改变背景颜色
  7. Spring源码解析-applicationContext.xml加载和bean的注册
  8. Snabbdom(虚拟dom)
  9. 服务器虚拟化techtarget技术社区,服务器上的应用程序虚拟化
  10. 安装MYSql Windows7下MySQL5.5.20免安装版的配置
  11. 抓取Js动态生成数据且以滚动页面方式分页的网页
  12. SpringBoot+zk+dubbo架构实践(三):部署Dubbo-admin管理平台
  13. Scrum 敏捷项目管理
  14. STM32官方应用笔记分类汇总
  15. ACM解题总结——HihoCoder1237 (微软笔试题)
  16. wps+for+linux+字体大小,WPS for Linux(ubuntu)字体配置(字体缺失解决办法)
  17. h5和mysql做图书系统_HTML5的WebGL3D档案馆图书可视化管理系统的实现
  18. 什么是MergedBeanDefinition?
  19. 64位x86-64处理器
  20. Ubuntu解压安装包及make命令相关操作(针对make: *** [btest] Error 127以及make: *** [btest] Error 1)

热门文章

  1. winvnc3.3.3连接就关闭
  2. java制作魔方_CSS3 制作魔方 - 玩转魔方
  3. 苹果手机有护眼模式吗_暗黑模式=护眼模式?其实手机中的这个设置才真正护眼...
  4. 电脑重装系统后播放视频卡顿怎么办
  5. 劫持 64 位静态程序 fini_array 进行 ROP 攻击
  6. 《炼数成金-Linux内核探秘》笔记4
  7. 【数据集划分】误用shuffle,导致训练集和测试集掺混
  8. recyclerview简单实现立体魔方动画切换效果
  9. 宝塔面板+小鸟云服务器+wordpress建站使用
  10. QGIS官方样式库首现来自中国的贡献——国土空间规划样式库和分区配色表