... ou exécution "séquentielle vs parallèle" ... bien que le vrai parallélisme nécessite plusieurs cœurs, sinon il est logiquement entrelacé.
samis
8
J'avais l'habitude de confondre les deux termes, et la façon dont je me suis souvenu de la différence est de jeter le premier "A" dans " A JAX" qui signifie asynchrone, en JavaScript lorsque vous faites des demandes avec AJAX dans une boucle, ils n'attendent pas les uns des autres ou bloquent le processus, car le navigateur ne veut pas avoir d'impact sur l'expérience utilisateur avec un site gelé, toutes les demandes sont envoyées presque en même temps sans attendre la réponse de la demande précédente. C'est asynchrone
Comptable le
Réponses:
1747
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 «thread». Un thread est une série de commandes (un bloc de code) qui existe comme unité de travail. Le système d'exploitation peut gérer plusieurs threads et affecter à un thread un morceau ("tranche") de temps processeur avant de passer à un autre thread pour lui donner un tour pour faire un peu de travail. À la 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 mixage, 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 cela consiste à 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 se lient lorsque vous pouvez les faire en même temps. Il existe de nombreux articles et livres sur le sujet; regarde!
Ce qui me dérange absolument, c'est que synchrone signifie "en même temps", mais lorsqu'il est utilisé dans le sens ci-dessus, il signifie séquentiel et asynchrone signifie "pas en même temps" ... ?? Quelqu'un peut-il expliquer ce conflit?
Damien Roche
45
@Zenph: Dans ce contexte, un bloc de code entier nous concerne. Synchrone signifie que le bloc est exécuté en même temps (cependant, oui, les composants sont exécutés séquentiellement). Asynchrone signifie que le bloc n'est pas tout exécuté en même temps.
Adam Robinson
8
L'exécution asynchrone se produit également lorsqu'un programme envoie un message à une file d'attente (comme dans les systèmes de messagerie, tels que ActiveMQ, WebSphere MQ, HornetQ, MSMQ, etc.). Dans ce cas, l'appel asynchrone n'implique pas de programmation multithread ou de gestion de la concurrence au niveau du système d'exploitation.
Paulo Merson
287
Curieusement, «Synchrone» signifie «utilisant la même horloge», donc lorsque deux instructions sont synchrones, elles utilisent la même horloge et doivent se produire l'une après l'autre. "Asynchrone" signifie "n'utilisant pas la même horloge", de sorte que les instructions ne se soucient pas d'être en phase les unes avec les autres. C'est pourquoi il regarde en arrière, le terme ne fait pas référence à la relation d'instructions les uns avec les autres. Cela fait référence à chaque relation d'instructions avec l'horloge. J'espère que cela pourra aider.
Synchrone / Asynchrone N'A RIEN À FAIRE AVEC LE MULTI-FILAGE.
Synchrone ou Synchronisé signifie "connecté" ou "dépendant" d'une certaine manière. 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 qui dépend de l'autre, comme attendre le démarrage jusqu'à ce que l'autre tâche soit terminée.
Asynchrone signifie qu'ils sont totalement indépendants et que ni l'un ni l'autre ne doit considérer l'autre de quelque façon que ce soit lors de l'initiation ou de l'exécution.
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--------->|
Points de début et de fin des tâches A, B, C représentés par <, >caractères.
Tranches de temps CPU représentées par des barres verticales |
Techniquement, le concept de synchrone / asynchrone n'a vraiment rien à voir avec les threads . Bien que, en général, il soit inhabituel de trouver des tâches asynchrones s'exécutant sur le même thread, il est possible, (voir ci-dessous pour des exemples) et il est courant de trouver deux ou plusieurs tâches s'exécutant de manière synchrone sur des threads séparés ... Non, le concept de synchrone / asynchrone a uniquement à voir avec le fait de savoir si une deuxième tâche ou une tâche ultérieure peut être lancée avant la fin de l'autre (première) tâche, ou si elle doit attendre. C'est tout. Quel thread (ou threads), ou processus, ou CPU, ou en effet, sur quel matériel, la ou les tâches sont exécutées n'est pas pertinent. En effet, pour faire ce point, j'ai édité les graphiques pour le montrer.
EXEMPLE ASYNCHRONE:
Pour résoudre 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. L'inversion d'une matrice ou un problème d'analyse par éléments finis sont de bons exemples. En informatique, le tri d'une liste en est un exemple. La routine de tri rapide, par exemple, divise la liste en deux listes et effectue un tri rapide sur chacune d'elles, en s'appelant (tri rapide) de manière récursive. 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 peut être codée 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'entrées dans l'autre tâche. Tant que les heures de début et de fin des tâches se chevauchent (possible uniquement si la sortie de l'une ou l'autre n'est pas nécessaire comme entrées pour l'autre), elles sont exécutées de manière asynchrone, quel que soit le nombre de threads utilisés.
EXEMPLE SYNCHRONE:
Tout processus composé de 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 du service financier, etc.). Si c'est sur une machine distincte, c'est sur un thread séparé, qu'il soit synchrone ou asynchrone.
pourquoi dans le monde les mots signifient des choses différentes dans l'ordinateur ... me laissent toujours revenir à cela ... à partir du dictionnaire .. synchrone: se produisant en même temps. asynchrone: ne se produisant pas en même temps.
Muhammad Umer
17
mais comme vous pouvez le voir dans les ordinateurs, cela signifie le contraire
Muhammad Umer
5
Peut-être que la nomenclature est basée sur le fait de savoir si le lancement des tâches est "synchronisé" avec l'achèvement d'autres tâches?
Charles Bretana
11
@MuhammadUmer: dans le monde informatique, se produire en même temps est appelé concurrence.
Roy Ling
5
À mon humble avis, ces images ne décrivent pas toutes l'exécution synchrone vs asynchrone de tâches Par exemple, la deuxième image implique que les tâches asynchrones nécessitent plusieurs threads. En fait, ce n'est pas le cas. Et ces tâches doivent être exécutées en parallèle, ce qui n'est pas une exigence également. Ou bien, l'image pour "synchrone" montre très bien comment les tâches ont été réparties de manière asynchrone sur un site d'appel et s'exécutent maintenant dans un planificateur de tâches en série;) IMO, les images sont trompeuses.
CouchDeveloper du
642
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 devant vous n'en reçoive un, et il en va de même pour les personnes en attente derrière vous.
ASYNCHRONE
Vous êtes dans un restaurant avec beaucoup d'autres personnes. Vous commandez votre nourriture. D'autres personnes peuvent également commander leur nourriture, elles n'ont pas à attendre que votre nourriture soit cuite et servie avant de pouvoir commander. Dans la cuisine, les employés du restaurant cuisinent, servent et prennent des commandes en continu. Les gens recevront leur nourriture dès qu'elle sera cuite.
Si quelqu'un veut des pommes par rapport aux pommes; si vous vouliez que le scénario du restaurant soit synchrone, alors lorsque vous commandez de la nourriture, tout le monde dans le restaurant devrait attendre que votre nourriture arrive avant de pouvoir commander leur nourriture, etc. Maintenant, cela semble être un scénario vraiment stupide, mais dans le monde informatique, ce scénario pourrait être utile. Supposons que chaque client ne puisse pas décider ce qu'il veut et qu'il souhaite plutôt regarder ce que le client précédent commande pour décider s'il le souhaite ou non, il est donc logique d'attendre l'arrivée des aliments avant de commander.
Fonix
Juste pour ajouter ... cela pourrait être pour que les opérations s'exécutent comme dans une file d'attente dans les opérations asynchrones ... Mais ce n'est pas obligatoire du tout.
Sreekanth Karumanaghat
5
exemple très simple et réel
Manish
Pour pousser votre exemple encore plus loin, ils pourraient envisager plusieurs portes pour vendre des billets. Par conséquent, chaque ligne peut fonctionner de manière asynchrone à partir de l'autre ligne mais de manière synchrone en elle-même!
Saeed Ahadian
334
Explication simple par analogie
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 tu ne vas pas faire quelque chose pendant que je termine ça?"
il est comme: "Non, j'attends 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 mon travail, le patron s'en va et fait d'autres tâches. Lorsque je termine mon travail, je fais simplement rapport à mon patron et je dis: "Je suis FAIT!" Il s'agit de l'exécution asynchrone.
(Suivez mon conseil: ne travaillez JAMAIS avec le patron derrière vous.)
Je suis fait ... c'est encore plus drôle quand vous prenez cela comme une démission.
Daedric
91
L'exécution synchrone signifie que l'exécution se produit dans une seule série. A->B->C->D. Si vous appelez ces routines, As'exécutera, puis se terminera, puis Bcommencera, puis se terminera, puis Ccommencera, etc.
Avec l' exécution asynchrone , vous commencez une routine et la laissez s'exécuter en arrière-plan pendant que vous démarrez la suivante, puis à un moment donné, dites «attendez que cela se termine». C'est plus comme:
Début d' A->B->C->D->attente pour Aà la fin
L'avantage est que vous pouvez exécuter B, Cet ou Dpendant qu'il Aest toujours en cours d'exécution (en arrière-plan, sur un thread séparé), de sorte que vous puissiez mieux tirer parti de vos ressources et avoir moins de «blocages» ou «temps d'attente».
@ Reed Copsey ...... Merci pour une si bonne explication ..... Je voulais juste plus d'informations sur Async-Exec ...... Basé sur votre réponse dans Async Exec .... Démarrer A-> B-> C-> D-> Attendez que A se termine ... Donc, tous les A, B, C, D commencent à la fois ...... et ils attendent que A se termine ..... B ne terminera qu'après la fin de A, et C après B et ainsi de suite ......? Ou bien B peut-il terminer d'abord, puis A peut terminer?
Devrath
8
@Devrath Les opérations peuvent se terminer dans n'importe quel ordre.
Reed Copsey
59
En résumé, la synchronisation fait référence aux points de début et de fin de deux ou plusieurs processus , PAS à leurs 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 -------- |
Les processus asynchrones, en revanche, n'ont pas leurs points de départ et d'extrémité synchronisés:
ASYNCHRONE
| -------- A -------- |
| -------- B -------- |
Lorsque le processus A chevauche le processus B, ils s'exécutent simultanément ou de manière synchrone (définition de dictionnaire), d'où la confusion.
MISE À JOUR: Charles Bretana a amélioré sa réponse , donc cette réponse est maintenant juste un simple mnémonique (potentiellement simplifié).
@DineshSaini - Mon diagramme est légèrement différent. Pour plus de clarté, j'ai placé A au-dessus de B dans les deux cas, en soulignant si leurs points de début et de fin sont synchronisés. Le diagramme de Charles Bretana place les processus synchrones en séquence sans rien "synchroniser". (J'allais commenter ci-dessous sa réponse pour "l'améliorer", mais j'ai réalisé qu'il serait plus facile de simplement montrer le nouveau diagramme.)
entr0p3te
Grands diagrammes. Je pense que la façon d'appeler le SYNC supérieur est que le début et la fin de A dans le diagramme supérieur sont effectivement en même temps, en ce sens qu'aucun autre événement n'est intervenu, ou n'aurait pu interférer avec l'achèvement de A. La synchronisation peut faire référence à une seule tâche de manière isolée, comme l'ajout aux registres du processeur, dont le début et la fin sont si proches, qu'ils sont effectivement synchronisés par dictionnaire.
Dean Radcliffe
55
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).
Mais si nous devions faire doSomething asynchrone (plusieurs façons de le faire), la sortie pourrait devenir:
Before call
After call
In call
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 des opérations asynchrones. Il pourrait également s'exécuter comme l'original, en fonction de la synchronisation des threads, etc.
Je pense que c'est une explication un peu ronde, mais cela clarifie toujours en utilisant un exemple réel.
Petit exemple:
Disons que la lecture d'un audio implique trois étapes:
Récupérer le morceau compressé depuis le disque dur
Décompressez l'audio.
Lisez l'audio non compressé.
Si votre lecteur audio effectue les étapes 1, 2, 3 séquentiellement pour chaque morceau, il est alors 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 les étapes 1, 2, 3 indépendamment les uns des autres, il est alors 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 pour aller chercher et décompresser.
Les opérations de synchronisation et asynchrones concernent l'ordre d'exécution d'une nouvelle tâche par rapport à la tâche actuelle. Deux tâches sur une table: la tâche actuelle et une nouvelle tâche
Synchrone (blocage) - implique que les tâches seront exécutées une par une. Une tâche suivante n'est démarrée qu'après la fin de sa tâche précédente. Task 2n'est pas démarré avant la Task 1fin
Asynchrone (non bloquant) - implique que la tâche retourne le contrôle immédiatement avec la promesse d'exécuter un code et de notifier le résultat plus tard (par exemple rappel, fonctionnalité). Task 2est exécuté même s'il Task 1n'est pas terminé
SO réponse à propos de la synchronisation et de l'async: dans iOS , dans Android
Le diagramme de l'exemple multithread synchrone semble représenter l'exécution simultanée de threads?
samis
@ sαmosΛris, vous pouvez considérer le fil comme l'axe X qui indique la chronologie
yoAlex5
L'axe des x est classiquement utilisé comme dimension spatiale; l'axe des t pour le temps - une distinction importante trouvée dans l'analyse de la complexité des algorithmes.
samis
23
Simplement dit, l'exécution asynchrone fait 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 cela bloquera votre thread jusqu'à ce que le fichier soit téléchargé. Cela peut rendre votre application insensible à toute entrée utilisateur.
Au lieu de cela, vous pouvez télécharger le fichier en arrière-plan à l'aide de la 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 averti lorsqu'il sera terminé.
comment votre exemple va être plus rapide. À la fin, vous ne pouvez pas lire le fichier tant que la période de téléchargement n'est pas terminée. Peux-tu expliquer? Je suppose que je ne comprends pas alors async et c'est probablement moi, mais que ferait cette autre étape ou processus pendant que l'autre processus est en cours (obtenir le téléchargement)? Je veux dire que pouvez-vous faire jusqu'à ce que vous receviez ce processus asynchrone (téléchargement) dans votre application ... Je ne comprends pas. Alors quoi, vous auriez encore à montrer à l'utilisateur une sorte de mécanisme d'attente sans importance quoi dans l'une ou l'autre situation?
PositiveGuy
4
Cela ne doit pas être plus rapide. Il s'agit de ne pas bloquer le thread principal, afin qu'il puisse traiter d'autres types d'entrée utilisateur. Par exemple, l'utilisateur peut vouloir annuler le téléchargement ou commencer à télécharger un autre fichier simultanément.
Michał Piaskowski
19
Comme exemple très simple,
SYNCHRONE
Imaginez 3 élèves de l'école chargés de courir une course de relais sur une route.
Le 1er élève parcourt sa distance donnée, s'arrête et passe le relais au 2e. Personne d'autre n'a commencé à courir.
1------>
2.
3.
Lorsque la 2e élève récupère le bâton, elle commence à courir la distance qui lui est donnée.
1.
2------>
3.
La 2e étudiante a détaché son lacet. Maintenant, elle s'est arrêtée et s'est à nouveau ligotée. Pour cette raison, l'heure de fin du 2e s'est allongée et l'heure de début du 3e a été retardée.
1.
--2.--->
3.
Ce schéma se poursuit jusqu'à ce que le 3e récupère le bâton du 2e et termine la course.
ASYNCHRONE
Imaginez seulement 10 personnes au hasard marchant sur la même route. Ils ne sont pas sur une file d'attente bien sûr, marchant simplement au hasard sur différents endroits sur la route à des rythmes différents.
Le lacet de la 2e personne s'est détaché. Elle s'est arrêtée pour la refermer.
Mais personne n'attend qu'elle soit attachée. Tous les autres marchent toujours de la même façon qu'avant, à ce rythme.
J'ai créé un gif pour expliquer cela, j'espère être utile: regardez, la ligne 3 est asynchrone et les autres sont synchrones. toutes les lignes avant la ligne 3 doivent attendre jusqu'à ce que la ligne termine son travail, mais en raison de la ligne 3 est asynchrone, la ligne suivante (ligne 4), n'attendez pas la ligne 3, mais la ligne 5 doit attendre que la ligne 4 termine son travail, et la ligne 6 doit attendre les lignes 5 et 7 pour 6, car la ligne 4,5,6,7 n'est pas asynchrone.
pourriez-vous s'il vous plaît être plus précis dans ce que vous voulez dire en fournissant plus de contexte à vos exemples
krichard
5
Cette réponse n'est tout simplement pas correcte.
Marquis de Lorne
7
Vous confondez Synchronous avec Parallel vs Series. Synchrone signifie tout en même temps. Syncronisé signifie lié les uns aux autres ce qui peut signifier en série ou à un intervalle fixe. Pendant que le programme fait tout, il s'exécute en série. Obtenez un dictionnaire ... c'est pourquoi nous avons du thé non sucré. Vous avez du thé ou du thé sucré.
En fait, "synchronisé" fait référence à la relation entre les instructions et l'horloge. PAS la relation entre les instructions elles-mêmes. C'est pourquoi il regarde en arrière "synchrone" signifie en fait l'un après l'autre: mais les instructions sont SYNCHRONISÉES à l'horloge. "Asynchrone" signifie "à tout moment, peu m'importe quand cela arrive": les instructions n'ont pas besoin d'être synchronisées avec l'horloge. Oui, il existe une définition de dictionnaire, mais vous devez vous assurer que vous définissez la situation correcte.
Tom Padilla
1
Synchrone ne signifie pas «tout en même temps» en informatique. Vous confondez la synchronisation avec synchrone et «parallèle contre série» avec le thé et le thé sucré. La réponse n'a aucun sens.
Marquis de Lorne
7
Synchrone signifie essentiellement que vous ne pouvez exécuter qu'une seule chose à la fois. Asynchrone signifie que vous pouvez exécuter plusieurs choses à la fois et que vous n'avez pas besoin de terminer l'exécution de la chose en cours pour passer à la suivante.
N'est-ce pas que plusieurs choses s'exécutant en même temps s'appellent Multithreading plutôt qu'asynchrones.
Sreekanth Karumanaghat
7
Utilisez un exemple d'instructions pour préparer un petit-déjeuner
Versez une tasse de café.
Faites chauffer une poêle, puis faites frire deux œufs.
Faites frire trois tranches de bacon.
Faire griller deux morceaux de pain.
Ajouter le beurre et la confiture au toast.
Versez un verre de jus d'orange.
Si vous avez de l'expérience en cuisine, vous exécuterez ces instructions de manière asynchrone. vous commencez à réchauffer la poêle pour les œufs, puis démarrez le bacon. Vous mettriez le pain dans le grille-pain, puis commenceriez les œufs. À chaque étape du processus, vous commenceriez une tâche, puis tourneriez votre attention vers des tâches qui sont prêtes à votre attention.
La cuisson du petit - déjeuner est un bon exemple de travail asynchrone qui n'est pas parallèle. Une seule personne (ou thread) peut gérer toutes ces tâches. Poursuivant l'analogie avec le petit-déjeuner, une personne peut préparer le petit-déjeuner de manière asynchrone en commençant la tâche suivante avant la fin du premier. La cuisson progresse, que quelqu'un le regarde ou non. Dès que vous commencez à réchauffer la poêle pour les œufs, vous pouvez commencer à faire frire le bacon. Une fois que le bacon commence, vous pouvez mettre le pain dans le grille-pain.
Pour un algorithme parallèle, vous auriez besoin de plusieurs cuisiniers (ou threads). L'un ferait les œufs, l'autre le bacon, etc. Chacun serait concentré sur cette seule tâche. Chaque cuisinier (ou fil) serait bloqué de manière synchrone en attendant que le bacon soit prêt à être retourné ou le toast à éclater.
Je serais plus d'accord avec cela si vous disiez «efficacement en même temps» ou «à des fins pratiques». Je pense que le downvote était pour la déclaration inexacte que les choses se font en fait au même moment.
Dean Radcliffe
1
Je pense qu'une bonne façon d'y penser est une course de relais classique
Synchrone : processus comme les membres de la même équipe, ils ne s'exécuteront pas tant qu'ils ne recevront pas de matraque (fin de l'exécution du processus / coureur précédent) et pourtant ils agissent tous en synchronisation les uns avec les autres.
Asynchrone : lorsque des processus comme des membres d'équipes différentes sur la même piste de course à relais, ils s'exécutent et s'arrêtent, en se synchronisant les uns avec les autres, mais au sein de la même course (exécution globale du programme).
Une autre définition anglaise de Synchronize est ici
Coordonner; combiner.
Je pense que c'est une meilleure définition que de "se produire en même temps". Celui-là est aussi une définition, mais je ne pense pas que ce soit celui qui correspond à la façon dont il est utilisé en informatique.
Ainsi, une tâche asynchrone n'est pas coordonnée avec d'autres tâches, alors qu'une tâche synchrone EST coordonnée avec d'autres tâches, donc l'une se termine avant qu'une autre ne commence.
Comment cela est réalisé est une question différente.
Synchrone signifie que l'exécution une à une des tâches en file d'attente sera exécutée. Supposons qu'il n'y ait qu'un véhicule à partager entre amis pour atteindre leur destination un par un.
Dans le cas asynchrone, chaque ami peut obtenir un véhicule loué et atteindre sa destination.
Oui synchrone signifie en même temps, littéralement, cela signifie travailler tous ensemble. plusieurs humains / objets dans le monde peuvent faire plusieurs choses en même temps, mais si nous regardons l'ordinateur, cela signifie des moyens synchrones où les processus fonctionnent ensemble, ce qui signifie que les processus dépendent du retour les uns des autres et c'est pourquoi ils sont exécutés un après l'autre dans l'ordre approprié. Alors que asynchrone signifie que les processus ne fonctionnent pas ensemble, ils peuvent fonctionner en même temps (s'ils sont sur du multithread), mais fonctionnent indépendamment.
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 «thread». Un thread est une série de commandes (un bloc de code) qui existe comme unité de travail. Le système d'exploitation peut gérer plusieurs threads et affecter à un thread un morceau ("tranche") de temps processeur avant de passer à un autre thread pour lui donner un tour pour faire un peu de travail. À la 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 mixage, 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 cela consiste à 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 se lient lorsque vous pouvez les faire en même temps. Il existe de nombreux articles et livres sur le sujet; regarde!
la source
Synchrone / Asynchrone N'A RIEN À FAIRE AVEC LE MULTI-FILAGE.
Synchrone ou Synchronisé signifie "connecté" ou "dépendant" d'une certaine manière. 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 qui dépend de l'autre, comme attendre le démarrage jusqu'à ce que l'autre tâche soit terminée.
Asynchrone signifie qu'ils sont totalement indépendants et que ni l'un ni l'autre ne doit considérer l'autre de quelque façon que ce soit lors de l'initiation ou de l'exécution.
Synchrone (un fil):
Synchrone (multi-thread):
Asynchrone (un thread):
Asynchrone (multi-thread):
<
,>
caractères.|
Techniquement, le concept de synchrone / asynchrone n'a vraiment rien à voir avec les threads . Bien que, en général, il soit inhabituel de trouver des tâches asynchrones s'exécutant sur le même thread, il est possible, (voir ci-dessous pour des exemples) et il est courant de trouver deux ou plusieurs tâches s'exécutant de manière synchrone sur des threads séparés ... Non, le concept de synchrone / asynchrone a uniquement à voir avec le fait de savoir si une deuxième tâche ou une tâche ultérieure peut être lancée avant la fin de l'autre (première) tâche, ou si elle doit attendre. C'est tout. Quel thread (ou threads), ou processus, ou CPU, ou en effet, sur quel matériel, la ou les tâches sont exécutées n'est pas pertinent. En effet, pour faire ce point, j'ai édité les graphiques pour le montrer.
EXEMPLE ASYNCHRONE:
Pour résoudre 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. L'inversion d'une matrice ou un problème d'analyse par éléments finis sont de bons exemples. En informatique, le tri d'une liste en est un exemple. La routine de tri rapide, par exemple, divise la liste en deux listes et effectue un tri rapide sur chacune d'elles, en s'appelant (tri rapide) de manière récursive. 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 peut être codée 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'entrées dans l'autre tâche. Tant que les heures de début et de fin des tâches se chevauchent (possible uniquement si la sortie de l'une ou l'autre n'est pas nécessaire comme entrées pour l'autre), elles sont exécutées de manière asynchrone, quel que soit le nombre de threads utilisés.
EXEMPLE SYNCHRONE:
Tout processus composé de 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 du service financier, etc.). Si c'est sur une machine distincte, c'est sur un thread séparé, qu'il soit synchrone ou asynchrone.
la source
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 devant vous n'en reçoive un, et il en va de même pour les personnes en attente derrière vous.
ASYNCHRONE
Vous êtes dans un restaurant avec beaucoup d'autres personnes. Vous commandez votre nourriture. D'autres personnes peuvent également commander leur nourriture, elles n'ont pas à attendre que votre nourriture soit cuite et servie avant de pouvoir commander. Dans la cuisine, les employés du restaurant cuisinent, servent et prennent des commandes en continu. Les gens recevront leur nourriture dès qu'elle sera cuite.
la source
Explication simple par analogie
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 tu ne vas pas faire quelque chose pendant que je termine ça?"
il est comme: "Non, j'attends 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 mon travail, le patron s'en va et fait d'autres tâches. Lorsque je termine mon travail, je fais simplement rapport à mon patron et je dis: "Je suis FAIT!" Il s'agit de l'exécution asynchrone.
(Suivez mon conseil: ne travaillez JAMAIS avec le patron derrière vous.)
la source
L'exécution synchrone signifie que l'exécution se produit dans une seule série.
A->B->C->D
. Si vous appelez ces routines,A
s'exécutera, puis se terminera, puisB
commencera, puis se terminera, puisC
commencera, etc.Avec l' exécution asynchrone , vous commencez une routine et la laissez s'exécuter en arrière-plan pendant que vous démarrez la suivante, puis à un moment donné, dites «attendez que cela se termine». C'est plus comme:
Début d'
A->B->C->D->
attente pourA
à la finL'avantage est que vous pouvez exécuter
B
,C
et ouD
pendant qu'ilA
est toujours en cours d'exécution (en arrière-plan, sur un thread séparé), de sorte que vous puissiez mieux tirer parti de vos ressources et avoir moins de «blocages» ou «temps d'attente».la source
En résumé, la synchronisation fait référence aux points de début et de fin de deux ou plusieurs processus , PAS à leurs exécutions . Dans cet exemple, le point de terminaison du processus A est synchronisé avec le point de départ du processus B:
Les processus asynchrones, en revanche, n'ont pas leurs points de départ et d'extrémité synchronisés:
Lorsque le processus A chevauche le processus B, ils s'exécutent simultanément ou de manière synchrone (définition de dictionnaire), d'où la confusion.
MISE À JOUR: Charles Bretana a amélioré sa réponse , donc cette réponse est maintenant juste un simple mnémonique (potentiellement simplifié).
la source
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).
Par exemple:
Cela produira toujours:
Mais si nous devions faire doSomething asynchrone (plusieurs façons de le faire), la sortie pourrait devenir:
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 des opérations asynchrones. Il pourrait également s'exécuter comme l'original, en fonction de la synchronisation des threads, etc.
la source
Je pense que c'est une explication un peu ronde, mais cela clarifie toujours en utilisant un exemple réel.
Petit exemple:
Disons que la lecture d'un audio implique trois étapes:
Si votre lecteur audio effectue les étapes 1, 2, 3 séquentiellement pour chaque morceau, il est alors 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 les étapes 1, 2, 3 indépendamment les uns des autres, il est alors 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 pour aller chercher et décompresser.
la source
Les opérations de synchronisation et asynchrones concernent l'ordre d'exécution d'une nouvelle tâche par rapport à la tâche actuelle. Deux tâches sur une table: la tâche actuelle et une nouvelle tâche
Synchrone (blocage) - implique que les tâches seront exécutées une par une. Une tâche suivante n'est démarrée qu'après la fin de sa tâche précédente.
Task 2
n'est pas démarré avant laTask 1
finAsynchrone (non bloquant) - implique que la tâche retourne le contrôle immédiatement avec la promesse d'exécuter un code et de notifier le résultat plus tard (par exemple rappel, fonctionnalité).
Task 2
est exécuté même s'ilTask 1
n'est pas terminéSO réponse à propos de la synchronisation et de l'async: dans iOS , dans Android
la source
Simplement dit, l'exécution asynchrone fait 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 cela bloquera votre thread jusqu'à ce que le fichier soit téléchargé. Cela peut rendre votre application insensible à toute entrée utilisateur.
Au lieu de cela, vous pouvez télécharger le fichier en arrière-plan à l'aide de la 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 averti lorsqu'il sera terminé.
la source
Comme exemple très simple,
SYNCHRONE
Imaginez 3 élèves de l'école chargés de courir une course de relais sur une route.
Le 1er élève parcourt sa distance donnée, s'arrête et passe le relais au 2e. Personne d'autre n'a commencé à courir.
Lorsque la 2e élève récupère le bâton, elle commence à courir la distance qui lui est donnée.
La 2e étudiante a détaché son lacet. Maintenant, elle s'est arrêtée et s'est à nouveau ligotée. Pour cette raison, l'heure de fin du 2e s'est allongée et l'heure de début du 3e a été retardée.
Ce schéma se poursuit jusqu'à ce que le 3e récupère le bâton du 2e et termine la course.
ASYNCHRONE
Imaginez seulement 10 personnes au hasard marchant sur la même route. Ils ne sont pas sur une file d'attente bien sûr, marchant simplement au hasard sur différents endroits sur la route à des rythmes différents.
Le lacet de la 2e personne s'est détaché. Elle s'est arrêtée pour la refermer.
Mais personne n'attend qu'elle soit attachée. Tous les autres marchent toujours de la même façon qu'avant, à ce rythme.
la source
J'ai créé un gif pour expliquer cela, j'espère être utile: regardez, la ligne 3 est asynchrone et les autres sont synchrones. toutes les lignes avant la ligne 3 doivent attendre jusqu'à ce que la ligne termine son travail, mais en raison de la ligne 3 est asynchrone, la ligne suivante (ligne 4), n'attendez pas la ligne 3, mais la ligne 5 doit attendre que la ligne 4 termine son travail, et la ligne 6 doit attendre les lignes 5 et 7 pour 6, car la ligne 4,5,6,7 n'est pas asynchrone.
la source
Lors de l'exécution d'une séquence comme: a> b> c> d>, si nous obtenons un échec au milieu de l'exécution comme:
Puis on recommence depuis le début:
c'est synchrone
Si, cependant, nous avons la même séquence à exécuter: a> b> c> d>, et nous avons un échec au milieu:
... mais au lieu de redémarrer depuis le début, nous recommençons à partir du point d'échec:
... c'est asynchrone.
la source
Vous confondez Synchronous avec Parallel vs Series. Synchrone signifie tout en même temps. Syncronisé signifie lié les uns aux autres ce qui peut signifier en série ou à un intervalle fixe. Pendant que le programme fait tout, il s'exécute en série. Obtenez un dictionnaire ... c'est pourquoi nous avons du thé non sucré. Vous avez du thé ou du thé sucré.
la source
Synchrone signifie essentiellement que vous ne pouvez exécuter qu'une seule chose à la fois. Asynchrone signifie que vous pouvez exécuter plusieurs choses à la fois et que vous n'avez pas besoin de terminer l'exécution de la chose en cours pour passer à la suivante.
la source
Utilisez un exemple d'instructions pour préparer un petit-déjeuner
Si vous avez de l'expérience en cuisine, vous exécuterez ces instructions de manière asynchrone. vous commencez à réchauffer la poêle pour les œufs, puis démarrez le bacon. Vous mettriez le pain dans le grille-pain, puis commenceriez les œufs. À chaque étape du processus, vous commenceriez une tâche, puis tourneriez votre attention vers des tâches qui sont prêtes à votre attention.
La cuisson du petit - déjeuner est un bon exemple de travail asynchrone qui n'est pas parallèle. Une seule personne (ou thread) peut gérer toutes ces tâches. Poursuivant l'analogie avec le petit-déjeuner, une personne peut préparer le petit-déjeuner de manière asynchrone en commençant la tâche suivante avant la fin du premier. La cuisson progresse, que quelqu'un le regarde ou non. Dès que vous commencez à réchauffer la poêle pour les œufs, vous pouvez commencer à faire frire le bacon. Une fois que le bacon commence, vous pouvez mettre le pain dans le grille-pain.
Pour un algorithme parallèle, vous auriez besoin de plusieurs cuisiniers (ou threads). L'un ferait les œufs, l'autre le bacon, etc. Chacun serait concentré sur cette seule tâche. Chaque cuisinier (ou fil) serait bloqué de manière synchrone en attendant que le bacon soit prêt à être retourné ou le toast à éclater.
Référence des concepts de programmation asynchrone
la source
Une opération synchrone fait son travail avant de revenir à l'appelant.
Une opération asynchrone fait (la plupart ou la totalité) son travail après être retournée à l'appelant.
la source
En ce qui concerne la définition "en même temps " de l'exécution synchrone (qui prête parfois à confusion), voici un bon moyen de la comprendre:
Exécution synchrone : toutes les tâches d'un bloc de code sont toutes exécutées en même temps.
Exécution asynchrone : toutes les tâches d'un bloc de code ne sont pas toutes exécutées en même temps.
la source
Je pense qu'une bonne façon d'y penser est une course de relais classique
Synchrone : processus comme les membres de la même équipe, ils ne s'exécuteront pas tant qu'ils ne recevront pas de matraque (fin de l'exécution du processus / coureur précédent) et pourtant ils agissent tous en synchronisation les uns avec les autres.
Asynchrone : lorsque des processus comme des membres d'équipes différentes sur la même piste de course à relais, ils s'exécutent et s'arrêtent, en se synchronisant les uns avec les autres, mais au sein de la même course (exécution globale du programme).
Est-ce que ça fait du sens?
la source
Une autre définition anglaise de Synchronize est ici
Je pense que c'est une meilleure définition que de "se produire en même temps". Celui-là est aussi une définition, mais je ne pense pas que ce soit celui qui correspond à la façon dont il est utilisé en informatique.
Ainsi, une tâche asynchrone n'est pas coordonnée avec d'autres tâches, alors qu'une tâche synchrone EST coordonnée avec d'autres tâches, donc l'une se termine avant qu'une autre ne commence.
Comment cela est réalisé est une question différente.
la source
Synchrone signifie que l'exécution une à une des tâches en file d'attente sera exécutée. Supposons qu'il n'y ait qu'un véhicule à partager entre amis pour atteindre leur destination un par un.
Dans le cas asynchrone, chaque ami peut obtenir un véhicule loué et atteindre sa destination.
la source
Oui synchrone signifie en même temps, littéralement, cela signifie travailler tous ensemble. plusieurs humains / objets dans le monde peuvent faire plusieurs choses en même temps, mais si nous regardons l'ordinateur, cela signifie des moyens synchrones où les processus fonctionnent ensemble, ce qui signifie que les processus dépendent du retour les uns des autres et c'est pourquoi ils sont exécutés un après l'autre dans l'ordre approprié. Alors que asynchrone signifie que les processus ne fonctionnent pas ensemble, ils peuvent fonctionner en même temps (s'ils sont sur du multithread), mais fonctionnent indépendamment.
la source