Quelle est la différence entre l'exécution asynchrone et synchrone ?
Réponses
Trop de publicités?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 "thread". Un thread est une série de commandes - un bloc de code - qui existe en tant qu'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 d'effectuer son travail. À 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.
Il s'agit de permettre au système d'exploitation de gérer l'accomplissement 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 s'exécutera, puis se terminera, puis B commencera, puis se terminera, puis C commencera, etc.
Avec l'exécution asynchrone, vous lancez 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 ça se termine". C'est plutôt :
Début 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 encore en cours d'exécution (en arrière-plan, sur un thread séparé), ce qui vous permet de mieux tirer parti de vos ressources et de réduire les interruptions ou les attentes.
Synchrone signifie que l'appelant attend la réponse ou l'achèvement, asynchrone que l'appelant continue et qu'une réponse arrive plus tard (le cas échéant).
A titre d'exemple :
static void Main(string[] args)
{
Console.WriteLine("Before call");
doSomething();
Console.WriteLine("After call");
}
private static void doSomething()
{
Console.WriteLine("In call");
}
Cela donnera toujours un résultat :
Avant l'appel Pendant l'appel Après l'appel
Mais si nous devions rendre doSomething asynchrone (plusieurs façons de le faire), alors la sortie pourrait devenir :
Avant l'appel Après l'appel Pendant l'appel
Parce que la méthode effectuant l'appel asynchrone continuerait immédiatement avec la ligne de code suivante. Je dis "pourrait", car l'ordre d'exécution ne peut pas être garanti avec les opérations asynchrones. Il pourrait aussi s'exécuter comme l'original, en fonction du timing des threads, etc.
Je pense qu'il s'agit d'une explication un peu détournée, mais elle clarifie tout de même la situation en utilisant un exemple concret.
Petit exemple :
Disons que la lecture d'un fichier audio comporte trois étapes :
1. Getting the compressed song from harddisk
2. Decompress the audio.
3. Play the uncompressed audio.
Si votre lecteur audio effectue les étapes 1, 2 et 3 de manière séquentielle pour chaque chanson, alors il est synchrone. Vous devrez attendre un certain temps pour entendre la chanson jusqu'à ce qu'elle soit récupérée et décompressée.
Si votre lecteur audio effectue les étapes 1, 2 et 3 indépendamment les unes des autres, alors il est asynchrone, c'est-à-dire. Pendant la lecture de l'audio 1 (étape 3), s'il va chercher l'audio 3 sur le disque dur en parallèle (étape 1) et qu'il décompresse l'audio 2 en parallèle. (étape 2) Vous finirez par entendre la chanson sans attendre beaucoup pour la récupération et la décompression.