La concurrence, comme vous le savez peut-être déjà, est la capacité à gérer plusieurs tâches de manière simultanée. C’est un élément incontournable pour tout développeur Flutter souhaitant faire passer ses applications mobiles à la vitesse supérieure. Dans cet article, nous allons tâcher de vous donner les clés pour comprendre comment fonctionne la concurrence dans Flutter.
Avant de commencer
Vous souhaitez devenir des experts de la création d’applications mobile multiplateforme ? Notre formation Flutter et Dart en inter et intraentreprise. vous apprendra toutes les compétences nécessaires pour créer vos propres applications mobiles.
L’équipe Ambient IT
Qu’est-ce que la concurrence dans Flutter ?
Dans Flutter, la concurrence indique la capacité de l’application à faire plusieurs choses en même temps sans pour autant bloquer l’interface utilisateur.
Avec Dart, qui est le langage sous-jacent de Flutter, la concurrence se gère surtout avec des isolates, des Futures, et des Streams.
Concurrence vs Parallelisme : Quelles différences ?
La concurrence et le parallélisme sont souvent confondus, mais ils ne représentent pas la même chose :
- Le parallélisme est à l’exécution simultanée de plusieurs tâches, généralement sur un appareil multicœur.
- La concurrence, c’est l’art de jongler avec différentes tâches en donnant l’illusion qu’elles s’exécutent en parallèle, même sur un seul cœur de processeur.
La différence est subtile, mais elle est capitale pour comprendre comment fonctionne la concurrence.
Pourquoi la concurrence est-elle cruciale dans les applications mobiles ?
Dans l’écosystème des applications mobiles, la réactivité est le maitre mot pour les utilisateurs.
Personne n’aime une application qui se fige ou qui est trop lente.
Une bonne gestion de la concurrence est cruciale pour effectuer des requêtes réseau, des opérations de lecture/écriture de fichiers ou des calculs lourds, tout en gardant l’UI fluide.
Comment Flutter gère-t-il la concurrence et l’asynchronisme ?
Pour gérer la concurrence, Flutter utilise les Isolate de Dart.
Ce sont des fils d’exécution qui tournent en parallèle et qui disposent de leur propre pile d’appels et de leur propre espace mémoire.
C’est un peu la réponse de Dart aux Threads traditionnels, mais sans les problèmes de sécurité qu’entraine généralement le partage de mémoire.
À la différence des Threads, les Isolate ne partagent pas la mémoire et communiquent uniquement par passage de message.
Cela élimine donc les soucis de conditions de courses et les problèmes habituels liés au multithreading.
Flutter se sert donc des Isolate pour déléguer de lourdes tâches longues à un autre fil d’exécution. Cela libère ainsi le thread principal pour qu’il puisse se concentrer sur l’UI.
Futures, Streams et l’Event Loop
Les Futures et les Streams sont des abstractions spécifiques à Dart utilisées pour gérer les opérations asynchrones.
- Un Future est utilisé pour un résultat unique asynchrone. Utilisez-les lorsque vous avez besoin d’obtenir une donnée précise ou de terminer une tâche qui prend du temps comme une API call sans bloquer l’exécution du programme.
- Un Stream est comme un Future continu, fournissant une séquence de résultats au fil du temps. C’est la meilleure solution pour traiter les données qui arrivent de manière continue.
Il existe aussi async
qui est utilisé pour marquer une fonction qui retourne un Future.
Cela permet de simplifier la gestion des opérations asynchrones, mais pour les tâches plus gourmandes en ressources, les Isolate sont plus appropriés, car ils répartissent la tâche sur plusieurs cœurs au sein du processeur.
Programmation asynchrone avec async et await
async
et await
rendent le code asynchrone bien plus lisible, et donc bien plus facile à comprendre.
Ils permettent d’écrire des opérations asynchrones de façon linéaire sans tomber dans les travers des callbacks emboîtés.
Utilisez async
pour déclarer qu’une fonction est asynchrone et await
pour attendre que des opérations asynchrones se terminent.
C’est une bonne pratique pour éviter de bloquer l’exécution et permet de garder un code propre et facile à maintenir.
Gestion de la concurrence avec des isolates
La communication entre les Isolate se fait via des SendPort et ReceivePort.
Vous envoyez des messages d’un Isolate à un autre et chacun traite les message à son rythme. En réalisant toutes les tâches en arrière-plan, vous empêchez le ralentissement de L’UI.
Pour optimiser les gros calculs, les Isolate peuvent faire le gros du travail et simplement envoyer le résultat au thread principal. C’est une excellente façon d’éviter de geler l’interface utilisateur.
Conclusion
Une bonne gestion de la concurrence est essentielle pour créer des applications Flutter performantes et réactives.
Maitriser les outils et techniques de concurrence pour offrir la meilleure expérience utilisateur possible. Expérimentez avec isolates, les Futures, et les Streams pour trouver, vous aussi, vos techniques et vos recettes maison.