Dart並行


並行是同時執行多個指令序列。它涉及同時執行多個任務。
Dart使用Isolates作為並行工作的工具。dart:isolate包是Dart的解決方案,用於獲取單執行緒Dart程式碼並允許應用程式更多地使用可用的硬體。

隔離(Isolates)顧名思義,是執行程式碼的獨立單元。在它們之間傳送資料的唯一方法是傳遞訊息,就像在用戶端和伺服器之間傳遞訊息的方式一樣。隔離有助於程式利用多核微處理器開箱即用。

範例

下面通過一個例子程式碼來更好地理解這個概念。

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值。

這兩個函式(foomain)可能不一定每次都以相同的順序執行。無法保證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#程式碼可以啟動新執行緒一樣。

隔離與執行緒的不同之處在於隔離區有自己的記憶體。沒有辦法在隔離區之間共用變數 - 隔離區之間通訊的唯一方法是通過訊息傳遞。

註 - 對於不同的硬體和作業系統組態,上述輸出將有所不同。

隔離與Future

非同步執行複雜的計算工作對於確保應用程式的響應性非常重要。Dart Future是一種在完成後檢索非同步任務的值的機制,而Dart Isolates是一種抽象並行性並在實際的高階基礎上實現它的工具。