並行是同時執行多個指令序列。它涉及同時執行多個任務。
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
方法用來與其餘程式碼並行執行函式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程式碼可以從執行程式碼中產生新的隔離,就像Java或C#程式碼可以啟動新執行緒一樣。
隔離與執行緒的不同之處在於隔離區有自己的記憶體。沒有辦法在隔離區之間共用變數 - 隔離區之間通訊的唯一方法是通過訊息傳遞。
註 - 對於不同的硬體和作業系統組態,上述輸出將有所不同。
隔離與Future
非同步執行複雜的計算工作對於確保應用程式的響應性非常重要。Dart Future是一種在完成後檢索非同步任務的值的機制,而Dart Isolates是一種抽象並行性並在實際的高階基礎上實現它的工具。