- Dart 编程教程
- Dart 编程 - 主页
- Dart 编程 - 概述
- Dart 编程 - 环境
- Dart 编程 - 语法
- Dart 编程 - 数据类型
- Dart 编程 - 变量
- Dart 编程 - 运算符
- Dart 编程 - 循环
- Dart 编程 - 决策
- Dart 编程 - 数字
- Dart 编程 - 字符串
- Dart 编程 - 布尔值
- Dart 编程 - 列表
- Dart 编程 - 列表
- Dart 编程 - 地图
- Dart 编程 - 符号
- Dart 编程 - 符文
- Dart 编程 - 枚举
- Dart 编程 - 函数
- Dart 编程 - 接口
- Dart 编程 - 类
- Dart 编程 - 对象
- Dart 编程 - 集合
- Dart 编程 - 泛型
- Dart 编程 - 包
- Dart 编程 - 异常
- Dart 编程 - 调试
- Dart 编程 - Typedef
- Dart 编程 - 库
- Dart 编程 - 异步
- Dart 编程 - 并发
- Dart 编程 - 单元测试
- Dart 编程 - HTML DOM
- Dart 编程有用的资源
- Dart 编程 - 快速指南
- Dart 编程 - 资源
- Dart 编程 - 讨论
Dart 编程 - 并发
并发是指同时执行多个指令序列。它涉及同时执行多项任务。
Dart 使用Isolates作为并行工作的工具。dart :isolate 包是 Dart 的解决方案,它采用单线程 Dart 代码并允许应用程序更好地利用可用的硬件。
顾名思义,隔离是运行代码的隔离单元。在它们之间发送数据的唯一方法是传递消息,就像在客户端和服务器之间传递消息的方式一样。隔离有助于程序立即利用多核微处理器。
例子
让我们举一个例子来更好地理解这个概念。
import 'dart:isolate'; void foo(var message){ print('execution from foo ... the message is :${message}'); } void main(){ Isolate.spawn(foo,'Hello!!'); Isolate.spawn(foo,'Greetings!!'); Isolate.spawn(foo,'Welcome!!'); print('execution from main1'); print('execution from main2'); print('execution from main3'); }
在这里,Isolate类的spawn方法有助于与我们的代码的其余部分并行运行函数foo 。生成函数有两个参数 -
- 要生成的函数,以及
- 将传递给生成函数的对象。
如果没有对象要传递给生成的函数,则可以向其传递 NULL 值。
这两个函数(foo 和 main)不一定每次都以相同的顺序运行。无法保证foo何时执行以及main()何时执行。每次运行的输出都会不同。
输出1
execution from main1 execution from main2 execution from main3 execution from foo ... the message is :Hello!!
输出2
execution from main1 execution from main2 execution from main3 execution from foo ... the message is :Welcome!! execution from foo ... the message is :Hello!! execution from foo ... the message is :Greetings!!
从输出中,我们可以得出结论,Dart 代码可以从正在运行的代码中生成新的隔离,就像 Java 或 C# 代码可以启动新线程一样。
隔离与线程的不同之处在于隔离有自己的内存。隔离之间无法共享变量——隔离之间通信的唯一方法是通过消息传递。
注意- 对于不同的硬件和操作系统配置,上述输出将有所不同。
孤立与未来
异步执行复杂的计算工作对于确保应用程序的响应能力非常重要。Dart Future是一种在异步任务完成后检索其值的机制,而Dart Isolates是一种抽象并行性并在实用的高级基础上实现它的工具。