Dart编程 - 并发



并发是指同时执行多个指令序列。它涉及同时执行多个任务。

Dart使用Isolate作为并行工作的工具。dart:isolate包是Dart的解决方案,它可以处理单线程Dart代码,并允许应用程序更好地利用可用的硬件。

顾名思义,Isolate是运行代码的隔离单元。它们之间传递数据的唯一方式是通过传递消息,就像在客户端和服务器之间传递消息一样。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方法可以方便地与其余代码并行运行函数foospawn函数接受两个参数:

  • 要生成的函数,以及
  • 将传递给生成的函数的对象。

如果没有对象要传递给生成的函数,可以传递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#代码启动新线程一样,从运行代码中生成新的Isolate

Isolate与线程的不同之处在于,Isolate拥有自己的内存。无法在Isolate之间共享变量——Isolate之间通信的唯一方式是通过消息传递。

注意 - 不同的硬件和操作系统配置将产生不同的输出。

Isolate与Future

异步执行复杂的计算工作对于确保应用程序的响应性非常重要。Dart Future是一种在异步任务完成后检索其值的机制,而Dart Isolate是一种在实践中抽象并行性和实现它的高级工具。

广告