Programmation Dart - Concurrence
Concurrencyest l'exécution de plusieurs séquences d'instructions en même temps. Cela implique d'effectuer plus d'une tâche simultanément.
Dart utilise Isolatescomme outil pour faire des travaux en parallèle. ledart:isolate package est la solution de Dart pour prendre du code Dart monothread et permettre à l'application d'utiliser davantage le matériel disponible.
Isolates, comme son nom l'indique, sont des unités isolées de code en cours d'exécution. La seule façon d'envoyer des données entre eux est de passer des messages, comme la façon dont vous passez des messages entre le client et le serveur. Unisolate aide le programme à tirer parti des microprocesseurs multicœurs prêts à l'emploi.
Exemple
Prenons un exemple pour mieux comprendre ce concept.
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');
}
Ici le spawn méthode de la Isolate classe facilite l'exécution d'une fonction, foo, en parallèle avec le reste de notre code. lespawn La fonction prend deux paramètres -
- la fonction à générer, et
- un objet qui sera passé à la fonction engendrée.
Dans le cas où il n'y a aucun objet à passer à la fonction générée, une valeur NULL peut lui être transmise.
Les deux fonctions (foo and main)peut ne pas nécessairement fonctionner dans le même ordre à chaque fois. Il n'y a aucune garantie quant au momentfoo sera en cours d'exécution et quand main()sera en cours d’exécution. La sortie sera différente à chaque exécution.
Sortie 1
execution from main1
execution from main2
execution from main3
execution from foo ... the message is :Hello!!
Sortie 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!!
À partir des sorties, nous pouvons conclure que le code Dart peut engendrer un nouveau isolate d'exécuter du code comme la façon dont le code Java ou C # peut démarrer un nouveau thread.
Isolates diffèrent des threads en ce qu'un isolatea sa propre mémoire. Il n'y a aucun moyen de partager une variable entreisolates—Le seul moyen de communiquer entre isolates se fait via la transmission de messages.
Note - La sortie ci-dessus sera différente pour différentes configurations matérielles et de système d'exploitation.
Isoler v / s Future
Effectuer un travail de calcul complexe de manière asynchrone est important pour garantir la réactivité des applications. Dart Future est un mécanisme pour récupérer la valeur d'une tâche asynchrone après son achèvement, tandis que Dart Isolates sont un outil pour résumer le parallélisme et le mettre en œuvre sur une base pratique de haut niveau.