Programowanie w rzutkach - współbieżność
Concurrencyto wykonanie kilku sekwencji instrukcji w tym samym czasie. Polega na wykonywaniu więcej niż jednego zadania jednocześnie.
Dart używa Isolatesjako narzędzie do wykonywania prac równoległych. Plikdart:isolate Package jest rozwiązaniem firmy Dart, które pozwala pobierać jednowątkowy kod Dart i umożliwia aplikacji większe wykorzystanie dostępnego sprzętu.
Isolatesjak sama nazwa wskazuje, są to izolowane jednostki uruchomionego kodu. Jedynym sposobem przesyłania danych między nimi jest przekazywanie wiadomości, podobnie jak sposób przekazywania wiadomości między klientem a serwerem. Naisolate pomaga programowi wykorzystać zalety wielordzeniowych mikroprocesorów po wyjęciu z pudełka.
Przykład
Weźmy przykład, aby lepiej zrozumieć tę koncepcję.
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');
}
Tutaj spawn metoda Isolate klasa ułatwia uruchomienie funkcji, foo, równolegle z resztą naszego kodu. Plikspawn funkcja przyjmuje dwa parametry -
- funkcja, która ma zostać utworzona, i
- obiekt, który zostanie przekazany do spawnowanej funkcji.
W przypadku, gdy nie ma obiektu do przekazania do zrodzonej funkcji, można przekazać wartość NULL.
Dwie funkcje (foo and main)może niekoniecznie działać w tej samej kolejności za każdym razem. Nie ma gwarancji, kiedyfoo będzie wykonywany i kiedy main()będzie wykonywał. Wynik będzie inny przy każdym uruchomieniu.
Wyjście 1
execution from main1
execution from main2
execution from main3
execution from foo ... the message is :Hello!!
Wyjście 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!!
Na podstawie danych wyjściowych możemy wywnioskować, że kod Dart może spowodować powstanie nowego pliku isolate od uruchamiania kodu, takiego jak sposób, w jaki kod Java lub C # może rozpocząć nowy wątek.
Isolates różnią się od wątków tym, że plik isolatema własną pamięć. Nie ma sposobu, aby udostępnić zmienną międzyisolates—Jedyny sposób komunikacji isolates odbywa się poprzez przekazywanie wiadomości.
Note - Powyższe dane wyjściowe będą różne dla różnych konfiguracji sprzętu i systemu operacyjnego.
Isolate v / s Future
Asynchroniczne wykonywanie złożonej pracy obliczeniowej jest ważne, aby zapewnić responsywność aplikacji. Dart Future jest mechanizmem pobierania wartości zadania asynchronicznego po jego zakończeniu, while Dart Isolates są narzędziem do abstrahowania równoległości i wdrażania go na praktycznym, wysokim poziomie.