Dart 编程 - 并发
并发是指同时执行多个指令序列。它涉及同时执行多个任务。
Dart 使用 Isolates 作为并行工作的工具。dart:isolate 包是 Dart 的解决方案,用于采用单线程 Dart 代码并允许应用程序更好地利用可用的硬件。
Isolates,顾名思义,是运行代码的隔离单元。在它们之间发送数据的唯一方法是传递消息,就像在客户端和服务器之间传递消息一样。isolate 可帮助程序充分利用开箱即用的多核微处理器。
示例
让我们举一个例子来更好地理解这个概念。
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。spawn 函数采用两个参数 −
- 要生成的函数,以及
- 将传递给生成的函数的对象。
如果没有对象传递给生成的函数,则可以传递 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 代码可以从运行代码中生成新的 isolate,就像 Java 或 C# 代码可以启动新线程一样。
Isolate 与线程的不同之处在于 isolate 有自己的内存。isolate 之间无法共享变量 - isolate 之间通信的唯一方法是通过消息传递。
注意 − 上述输出将因不同的硬件和操作系统配置而有所不同。
Isolate 与 Future
异步执行复杂的计算工作对于确保应用程序的响应能力非常重要。 Dart Future 是一种在异步任务完成后检索其值的机制,而 Dart Isolates 是一种抽象并行性并在实用的高级基础上实现并行性的工具。