Question Exécution asynchrone vs synchrone, que signifie-t-elle vraiment?


Quelle est la différence entre une exécution asynchrone et synchrone?


869
2018-04-14 15:39


origine


Réponses:


Lorsque vous exécutez quelque chose de manière synchrone, vous attendez qu'il 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 étant 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 en tant qu'unité de travail. Le système d'exploitation peut gérer plusieurs threads et affecter un thread ("tranche") de temps processeur avant de passer à un autre thread pour lui donner un peu de travail. À sa base (pardonnez le jeu de mots), un processeur peut simplement exécuter une commande, il n'a aucun concept de faire deux choses à la fois. 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 arriver 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 cela consiste à permettre au système d'exploitation de gérer l'exécution de votre tâche pendant que vous pouvez continuer dans votre code et faire d'autres choses.

La programmation asynchrone est un sujet compliqué à cause de la sémantique de la façon dont les choses se rejoignent lorsque vous pouvez les faire en même temps. Il y a de nombreux articles et livres sur le sujet; regarde!


1360
2018-04-14 15:43



Synchrone / asynchrone N'A RIEN A FAIRE AVEC MULTI-FILETAGE.

Synchrone, ou Synchronisé signifie "connecté", ou "dépendant" d'une manière ou d'une autre. En d'autres termes, deux tâches synchrones doivent être conscientes l'une de l'autre et une tâche doit s'exécuter d'une manière dépendante de l'autre, par exemple attendre que l'autre tâche soit terminée.
Asynchrone signifie qu'ils sont totalement indépendants et qu'aucun des deux ne doit considérer l'autre de quelque manière que ce soit, soit en initiation, soit en exécution.

Synchrone (un thread):

1 thread ->   |<---A---->||<----B---------->||<------C----->|

Synchrone (multithread):

thread A -> |<---A---->|   
                        \  
thread B ------------>   ->|<----B---------->|   
                                              \   
thread C ---------------------------------->   ->|<------C----->| 

Asynchrone (un thread):

         A-Start ------------------------------------------ A-End   
           | B-Start -----------------------------------------|--- B-End   
           |    |      C-Start ------------------- C-End      |      |   
           |    |       |                           |         |      |
           V    V       V                           V         V      V      
1 thread->|<-A-|<--B---|<-C-|-A-|-C-|--A--|-B-|--C-->|---A---->|--B-->| 

Asynchrone (multi-thread):

 thread A ->     |<---A---->|
 thread B ----->     |<----B---------->| 
 thread C --------->     |<------C--------->|
  • Début et fin des tâches A, B, C représentées par <, > personnages.
  • Tranches de temps CPU représentées par des barres verticales |

Techniquement, le concept de synchrone / asynchrone vraiment n'a rien à voir avec les discussions. Bien qu'en général, il est inhabituel de trouver des tâches asynchrones fonctionnant sur le même thread, c'est possible, (voir ci-dessous pour des exemples) et il est commun pour trouver deux ou plusieurs tâches s'exécutant de manière synchrone sur séparé threads ... Non, le concept de synchrone / asynchrone doit faire uniquement avec si oui ou non une deuxième tâche ou suivante peut être lancée avant que l'autre (première) tâche soit terminée, ou si elle doit attendre. C'est tout. Quel fil (ou threads), ou processus, ou processeurs, ou en effet, quel matériel, la tâche [s] est exécutée sur n'est pas pertinent. En effet, pour faire ce point j'ai édité les graphiques pour le montrer.

EXEMPLE ASYNCHRONE. Dans la résolution de nombreux problèmes d'ingénierie, le logiciel est conçu pour diviser le problème global en plusieurs tâches individuelles, puis les exécuter de manière asynchrone. Inverser une matrice, ou un problème d'analyse par éléments finis, sont de bons exemples. En informatique, le tri d'une liste est un exemple. La routine de tri rapide, par exemple, divise la liste en deux listes et trie chacune d'entre elles en s'appelant récursivement. Dans les deux exemples ci-dessus, les deux tâches peuvent (et ont souvent été) exécutées de manière asynchrone. Ils n'ont pas besoin d'être sur des threads séparés. Même une machine avec un processeur et un seul thread d'exécution peuvent être codés pour lancer le traitement d'une deuxième tâche avant la fin de la première. Le seul critère est que les résultats d'une tâche ne sont pas nécessaires en tant qu'intrants à l'autre tâche. Tant que les heures de début et de fin des tâches se chevauchent, (ce qui n'est possible que si la sortie de l'une ou l'autre est nécessaire à l'autre), elles sont exécutées de manière asynchrone, quel que soit le nombre de threads utilisés.

EXEMPLE SYNCHRONIQUE. Tout processus consistant en plusieurs tâches où les tâches doivent être exécutées en séquence, mais une doit être exécutée sur une autre machine (extraire et / ou mettre à jour les données, obtenir une cotation boursière d'un service financier, etc.). Si c'est sur une machine séparée, il s'agit d'un thread séparé, qu'il soit synchrone ou asynchrone.


921
2018-04-14 15:53



En termes plus simples:

SYNCHRONE

Vous êtes dans une file d'attente pour obtenir un billet de cinéma. Vous ne pouvez pas en obtenir un avant que tout le monde en face de vous en reçoive un, et il en va de même pour les gens qui se trouvent derrière vous.

ASYNCHRONE

Vous êtes dans un restaurant avec beaucoup d'autres personnes. Vous commandez votre nourriture. D'autres personnes peuvent aussi commander leur nourriture, ils n'ont pas besoin d'attendre que votre nourriture soit cuisinée et servie avant de pouvoir commander. Dans la cuisine, les travailleurs cuisinent, servent et prennent des commandes en permanence. Les gens recevront leur nourriture servie dès qu'elle sera cuite.


519
2017-11-07 15:43



Je vais essayer de vous expliquer aussi simplement que possible afin de vous souvenir (je l'espère):

Exécution synchrone

Mon patron est un homme occupé. Il me dit d'écrire le code. Je lui dis: Très bien. Je commence et il me regarde comme un vautour, debout derrière moi, sur mon épaule. Je suis comme "Mec, WTF: pourquoi n'irais-tu pas faire quelque chose pendant que je finirais ça?"

il est comme: "Non, je suis attendre ici jusqu'à ce que vous ayez fini. "C'est synchrone.

Exécution asynchrone

Le patron me dit de le faire, et plutôt que d'attendre là pour mon travail, le patron s'en va et fait d'autres tâches. Quand j'ai fini mon travail, je rapporte simplement à mon patron et je dis: "Je suis FAIT!" C'est l'exécution asynchrone.

C'est vraiment aussi simple que ça! J'espère que cela aide.

(Suivez mon conseil: ne travaillez JAMAIS avec le patron derrière vous.)


247
2018-06-08 11:13



Exécution synchrone signifie que l'exécution se passe dans une seule série. A->B->C->D. Si vous appelez ces routines, A va courir, puis terminer, puis B va commencer, puis terminer, puis Cva commencer, etc.

Avec Exécution asynchrone, vous commencez une routine, et laissez-la tourner en arrière-plan pendant que vous commencez la suivante, puis à un moment donné, dites «attendez que cela se termine». C'est plus comme:

Début  A->B->C->D->Attendez pour A pour finir

L'avantage est que vous pouvez exécuter B, C, et ou D tandis que A est toujours en cours d'exécution (en arrière-plan, sur un thread séparé), de sorte que vous pouvez tirer le meilleur parti de vos ressources et avoir moins "se bloque" ou "attend".


73
2018-04-14 15:43



Synchrone signifie que l'appelant attend la réponse ou l'achèvement, asynchrone que l'appelant continue et qu'une réponse est reçue plus tard (le cas échéant).

Par exemple:

    static void Main(string[] args)
    {
        Console.WriteLine("Before call");
        doSomething();
        Console.WriteLine("After call");
    }

    private static void doSomething()
    {
        Console.WriteLine("In call");
    }

Cela sera toujours ouput:

Before call
In call
After call

Mais si nous devions faire quelque chose asynchrone (plusieurs façons de le faire), alors la sortie pourrait devenir:

Before call
After call
In call

Parce que la méthode faisant l'appel asynchrone continuerait immédiatement avec la prochaine ligne de code. 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 des minutages, etc.


46
2018-04-14 15:47



Je pense que c'est une explication un peu rocambolesque mais cela clarifie quand même en utilisant l'exemple de la vie réelle.

Petit exemple:

Disons que jouer un audio implique trois étapes:

  1. Obtenir la chanson compressée à partir du disque dur
  2. Décompresser l'audio.
  3. Jouer l'audio non compressé.

Si votre lecteur audio effectue des étapes 1,2,3 séquentiellement pour chaque morceau, il est synchrone. Vous devrez attendre un certain temps pour entendre la chanson jusqu'à ce que la chanson soit récupérée et décompressée.

Si votre lecteur audio effectue l'étape 1,2,3 indépendamment l'un de l'autre, il est asynchrone. c'est à dire. Lors de la lecture de l'audio 1 (étape 3), s'il extrait l'audio 3 du 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 d'aller chercher et décompresser.


30
2018-04-14 16:27



En un mot, la synchronisation se réfère à deux processus ou plus » début et fin points, NE PAS leur exécutions. Dans cet exemple, le point de terminaison du processus A est synchronisé avec le point de départ du processus B:

SYNCHRONE
   | -------- A -------- |
                     | -------- B -------- |

D'autre part, les processus asynchrones ne pas ont leurs points de départ et d'arrivée synchronisés:

ASYNCHRONE
   | -------- A -------- |
         | -------- B -------- |

Lorsque le processus A chevauche le processus B, il s'exécute simultanément ou synchrone (définition du dictionnaire), d'où la confusion.

MISE À JOUR: Charles Bretana amélioré sa réponse, donc cette réponse est maintenant juste un simple mnémonique (potentiellement trop simplifié).


25
2017-08-17 14:11