Je pourrais avoir une mauvaise idée d'isoler et de l'avenir, veuillez m'aider à clarifier les choses. Voici ma compréhension des deux sujets.
Isoler: Isolates exécuter le code dans sa propre boucle d'événements, et chaque événement peut exécuter des tâches plus petites dans une file d'attente de microtâches imbriquée.
Futur: Un Futur est utilisé pour représenter une valeur potentielle, ou erreur, qui sera disponible à un moment donné dans le futur.
Mes confusions sont:
Le doc dit qu'isoler a sa propre boucle? J'ai l'impression que sa propre file d'attente d'événements a plus de sens pour moi, je me trompe?
Le futur s'exécute-t-il de manière asynchrone sur l'isolat principal? Je suppose que la tâche future a effectivement été placée à la fin de la file d'attente des événements, donc si elle sera exécutée par boucle à l'avenir. Corrige moi si je me trompe.
Pourquoi utiliser Isolate quand il y a du futur? J'ai vu quelques exemples utilisant Isolate pour certaines tâches lourdes au lieu de Future. Mais pourquoi? Cela n'a de sens pour moi que lorsque le futur s'exécute de manière asynchrone sur la file d'attente principale isolée.
Merci les gars, appréciez votre réponse.
Un Future
est un descripteur qui vous permet d'être averti lorsque l'exécution asynchrone est terminée. L'exécution asynchrone utilise la file d'attente des événements et le code est exécuté simultanément dans le même thread.
https://webdev.dartlang.org/articles/performance/event-loop
Le code Dart est exécuté par défaut dans l'isolat racine.
Vous pouvez démarrer des isolats supplémentaires qui s'exécutent généralement sur un autre thread. Un isolat peut être chargé à partir du même code Dart avec lequel l'isolat racine a été démarré (avec un point d'entrée différent de main()
https://api.dartlang.org/stable/2.0). 0/Dart-isolate/Isolate/spawn.html ) ou avec un code Dart différent (chargé à partir d'un fichier Dart ou d'une URL https://api.dartlang.org/stable/2.0.0/Dart- isolate/Isolate/spawnUri.html ).
Les isolats ne partagent aucun état et ne peuvent communiquer qu'en utilisant la transmission de messages (SendPort/ReceivePort). Chaque isolat a sa propre file d'attente d'événements.
En une phrase, nous pourrions dire:
Isolates: Dart est mono-thread mais il est capable de faire des trucs multi-threading en utilisant Isolates (de nombreux processus).
Future: Future est un résultat qui est renvoyé lorsque Dart a terminé un travail asynchrone. Le travail est généralement effectué dans ce seul thread.
Isolate pourrait être comparé à Thread même si Dart n'est pas multithread. Il a sa propre mémoire et sa boucle d'événements en effet, lorsque Futures partage la même mémoire
Dart est capable de générer des processus autonomes, appelés Isolates (travailleurs Web dans Dart2js), qui ne partagent pas la mémoire lorsque le programme principal, mais sont capables de manière asynchrone, dans un autre processus (en fait un thread de toutes sortes) est capable de faire des calculs sans bloquer le fil principal.
Un avenir est exécuté à l'intérieur de l'isolat qui l'a appelé, pas nécessairement l'isolat principal.
Je recommande ceci article qui a une meilleure explication que moi.