Quelle est la différence entre l'exécution asynchrone et synchrone ?
Lorsque vous exécutez quelque chose de manière synchrone, vous attendez qu'elle se termine avant de passer à une autre tâche. Lorsque vous exécutez quelque chose de manière asynchrone, vous pouvez passer à une autre tâche avant qu'elle ne se termine.
Cela dit, dans le contexte des ordinateurs, cela se traduit par l'exécution d'un processus ou d'une tâche sur un autre "fil". Un thread est une série de commandes (un bloc de code) qui existe comme une unité de travail. Le système d'exploitation peut gérer plusieurs threads et attribuer à un thread un morceau ("tranche") de temps processeur avant de passer à un autre thread pour lui permettre de travailler à son tour. À la base (pardonnez le jeu de mots), un processeur peut simplement exécuter une commande, il n'a pas le concept de faire deux choses en même temps. Le système d'exploitation simule cela en allouant des tranches de temps à différents threads.
Maintenant, si vous introduisez plusieurs cœurs/processeurs dans le mélange, alors les choses PEUVENT réellement se produire en même temps. Le système d'exploitation peut allouer du temps à un thread sur le premier processeur, puis allouer le même bloc de temps à un autre thread sur un processeur différent. Tout ceci a pour but de permettre au système d'exploitation de gérer l'achèvement de votre tâche pendant que vous pouvez continuer dans votre code et faire d'autres choses.
La programmation asynchrone est un sujet compliqué en raison de la sémantique de la façon dont les choses sont liées lorsque vous pouvez les faire en même temps. Il existe de nombreux articles et livres sur le sujet ; jetez-y un coup d'œil !
L'exécution synchrone signifie que l'exécution se fait en une seule série. A->B->C->D
. Si vous appelez ces routines, A
va s'exécuter, puis se terminer, puis B
va commencer, puis se terminer, puis C
va commencer, etc.
Avec l' exécution asynchrone, vous commencez une routine, et la laissez s'exécuter en arrière-plan pendant que vous lancez la suivante, puis à un moment donné, vous dites "attendez que cela se termine". C'est plus comme :
Démarrer A->B->C->D->
Attendre que A
se termine
L'avantage est que vous pouvez exécuter B
, C
, et ou D
pendant que A
est toujours en cours d'exécution (en arrière-plan, sur un thread séparé), ainsi vous pouvez mieux profiter de vos ressources et avoir moins de "hang" ou "wait".
Pour faire simple, l'exécution asynchrone consiste à faire des choses en arrière-plan.
Par exemple, si vous souhaitez télécharger un fichier sur Internet, vous pouvez utiliser une fonction synchrone pour le faire, mais elle bloquera votre fil d'exécution jusqu'à ce que le téléchargement du fichier soit terminé. Cela peut rendre votre application non réactive à toute entrée de l'utilisateur.
Au lieu de cela, vous pouvez télécharger le fichier en arrière-plan en utilisant une méthode asynchrone. Dans ce cas, la fonction de téléchargement revient immédiatement et l'exécution du programme se poursuit normalement. Toutes les opérations de téléchargement sont effectuées en arrière-plan et votre programme sera notifié lorsqu'elles seront terminées.