Asynchrone vs exécution synchrone, ce que cela signifie vraiment?
Quelle est la différence entre asynchrone et synchrone de l'exécution?
- ... ou "séquentiel vs parallèles d'exécution" ... bien que le vrai parallélisme nécessite la présence de plusieurs cœurs, sinon c'est logiquement entrelacés.
- J'ai utilisé à confondre les deux termes, et comme je l'ai fait pour vous rappeler la différence est de jeter le premier "A", "AJAX", qui signifie asynchrone en JavaScript quand vous faites des demandes avec l'AJAX dans une boucle, ils n'attendez pas pour les autres ou de bloquer le processus, parce que le navigateur ne veut pas de l'impact de l'expérience utilisateur avec une gelée de site web, toutes les demandes sont envoyées à peu près au même moment, sans attendre la réponse de la requête précédente. C'est asynchrone
Vous devez vous connecter pour publier un commentaire.
Lors de l'exécution de quelque chose de façon synchrone, vous attendez la fin 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 la fin.
Cela étant dit, dans le contexte d'ordinateurs, cela se traduit par l'exécution d'un processus ou une tâche sur un autre "thread." Un thread est une série de commandes (un bloc de code) qui existe comme une unité de travail. Le système d'exploitation capable de gérer plusieurs threads et affecter un thread d'un morceau ("tranche") de temps processeur avant de passer à un autre thread pour donner un tour pour faire un peu de travail. À sa base (pardonnez le jeu de mots), un processeur peut exécuter une commande, il n'a pas de concept de faire deux choses à la fois. Le système d'exploitation simule ce par l'allocation de tranches de temps de différents threads.
Maintenant, si vous introduisez plusieurs noyaux de transformateurs dans le mix, alors les choses PEUVENT effectivement se produire en même temps. Le système d'exploitation peut consacrer du temps à un thread sur le premier processeur, puis affecter le même bloc de temps pour un autre thread sur un autre processeur. Tout cela est de permettre au système d'exploitation pour gérer la réalisation de votre tâche alors que vous pouvez aller dans votre code et faire d'autres choses.
De la programmation asynchrone est un sujet complexe, en raison de la sémantique de la façon dont les choses cravate quand vous pouvez le faire en même temps. Il ya de nombreux articles et livres sur le sujet, jetez un oeil!
Task
se déroule généralement sur un fil (même si certaines choses comme fichier et l'exploitation du réseau serait également faire usage de IO achèvement des fils, qui sont différents), mais n'est presque jamais un thread lui-même. Par défaut, les fils utilisés pour exécuter des tâches proviennent du pool de threads; ils ne sont pas filé individuellement pour chaque tâche et de l'éteindre après son achèvement.TThread
surtout pour le multi-threading. Il fait un excellent travail de mise en œuvre de threads, où ils obtiennent de split par le système d'exploitation sur les différents cœurs automatiquement. Mais, tout développeur doit encore vraiment attention à la façon dont chaque fil interagit avec les autres. Il n'est pas toujours une tâche facile. J'ai appris à compter sur event-driven threads.Synchrone/Asynchrone N'A RIEN À voir AVEC le MULTI-THREADING.
Synchrone, ou Synchronisé signifie "connecté", ou "dépendant" d'une certaine façon. En d'autres termes, deux synchrone tâches doivent être conscients l'un de l'autre, et une tâche doit s'exécuter dans une manière qui dépend de l'autre, comme les attendre pour commencer jusqu'à ce que la tâche est terminée.
Asynchrone signifie qu'ils sont totalement indépendants l'un et ni l'un doit examiner les autres en aucune façon, que ce soit en initiation ou en exécution.
Synchrone (un thread):
Synchrone (multi-thread):
Asynchrone (un thread):
Asynchrone (multi-Thread):
<
,>
caractères.|
Techniquement, le concept de synchrone/asynchrone vraiment n'a rien à voir avec les threads. Bien que, en général, il est rare de trouver des tâches asynchrones en cours d'exécution sur le même fil, il est possible, (voir ci-dessous pour des exemples) et il est commune de trouver deux ou plusieurs tâches d'exécution synchrone sur séparé fils... Non, le concept de synchrone/asynchrone a faire uniquement avec si oui ou non une deuxième tâche peut être lancée avant l'autre (d'abord) la tâche est achevée, ou si elle doit attendre. C'est tout. Ce thread (ou threads), ou processus, ou Cpu, ou en effet, ce type de matériel, la tâche[s] sont exécutés sur n'est pas pertinent. En effet, sur ce point j'ai édité les graphiques montrent.
ASYNCHRONE EXEMPLE. Dans la résolution de nombreux problèmes techniques, le logiciel est conçu pour diviser le problème en plusieurs tâches individuelles, et puis les exécuter de manière asynchrone. L'inversion d'une matrice ou d'une analyse par éléments finis du problème, en sont de bons exemples. En informatique, le tri d'une liste est un exemple. Le rapide de la routine de tri, par exemple, divise la liste en deux listes, et trie chaque d'entre eux en appelant récursivement. Dans les deux exemples ci-dessus, les deux tâches peuvent (et souvent) exécutée de manière asynchrone. Ils n'ont pas besoin d'être sur des threads séparés. Même une machine avec un CPU, et un seul thread d'exécution peuvent être codées afin d'initier le traitement d'une deuxième tâche avant que la première soit terminée. Le seul critère est que les résultats d'une tâche ne sont pas nécessaires comme intrants pour l'autre tâche. Tant que le début et la fin de l'tâches se chevauchent, (possible uniquement si la sortie de ni est nécessaire que les entrées à l'autre), ils sont en train d'être exécutée de manière asynchrone, peu importe le nombre de threads en cours d'utilisation.
SYNCHRONE EXEMPLE. Tout processus composé de plusieurs tâches où les tâches doivent être exécutées dans l'ordre, mais on doit être exécuté sur une autre machine (Extraction et/ou la mise à jour des données, obtenir un stock citation d'un service financier, etc.). Si c'est sur une machine séparée, c'est sur un thread séparé, synchrone ou asynchrone.
threading
package). Ils vous permettent de faire un travail simultanément---dans un intervalle, des progrès peuvent être réalisés sur des tâches multiples. Mais à un instantané dans le temps, qu'une tâche est en fait d'être opéré (si vous ne pouvez pas profiter de plusieurs Processeurs). L'idée clé ici est "interruptibility"---le travail peut être interrompu sur un fil alors qu'il est effectué sur une autre. Utile en Python pour les I/O-lié tâches, mais pas le CPU des tâches.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, jusqu'à ce que tout le monde en face de vous une seule, et la même chose s'applique pour les personnes en file d'attente derrière vous.
ASYNCHRONE
Vous êtes dans un restaurant avec de nombreuses autres personnes. Vous commandez vos aliments. D'autres personnes peuvent également commander leur nourriture, ils n'ont pas à attendre que votre nourriture soit cuit et servi pour vous avant de commander.
Dans la cuisine du restaurant les travailleurs sont constamment à la cuisine, le service et la prise de commandes.
Les gens vont obtenir leur nourriture servie dès qu'il est cuit.
Simple Explication par analogie
Exécution Synchrone
Mon patron est un homme très occupé. Il me dit d'écrire le code. Je lui dis: très bien. Je l'ai commencé et il est en train de me regarder comme un vautour, debout derrière moi, de mon épaule. Je suis comme "Mec, WTF: pourquoi ne vas-tu pas faire quelque chose pendant que je finis ce?"
il est comme: "Non, je suis attente ici jusqu'à la fin." C'est synchrone.
D'Exécution Asynchrone
Le patron me dit de le faire, et plutôt que d'attendre pour mon travail, le patron s'en va et fait d'autres tâches. Quand j'ai fini mon travail, j'ai simplement rapport à mon patron et dire: "je suis FAIT!" C'est d'Exécution Asynchrone.
(Suivez mon conseil: ne JAMAIS travailler avec le patron derrière vous.)
Exécution synchrone signifie que l'exécution se déroule dans une seule série.
A->B->C->D
. Si vous appelez ces routines,A
va exécuter, puis sur terminer, puisB
va démarrer, puis sur terminer, puisC
va commencer, etc.Avec d'exécution Asynchrone, vous commencez une routine, et de le laisser fonctionner en arrière-plan pendant que vous démarrez votre prochain, puis à un certain point, de dire "attendre pour ce terminer". C'est plus comme:
Commencer
A->B->C->D->
Attendre pourA
pour terminerL'avantage est que vous pouvez exécuter
B
,C
, et ouD
toutA
est toujours en cours d'exécution (en arrière-plan, sur un thread séparé), de sorte que vous pouvez tirer un meilleur parti de vos ressources et ont de moins en moins de "accroche" ou "en attente".Synchrone signifie que l'appelant attend la réponse ou de l'achèvement, asynchrone que l'appelant se poursuivent, et la réponse vient plus tard (le cas échéant).
Comme un exemple:
Ce sera toujours de sortie:
Mais si on devait faire doSomething asynchrone (plusieurs façons de le faire), alors la sortie pourrait devenir:
Parce que la méthode de prise de l'appel asynchrone serait immédiatement continuer avec la ligne de code suivante. Je dis "pourrait", car l'ordre d'exécution ne peut pas être garanti avec asynch opérations. Il peut également exécuter que l'original, en fonction de thread timings, etc.
En un mot, la synchronisation se réfère à deux ou plusieurs processus' commencer et fin points, PAS leur exécutions. Dans cet exemple, Une extrémité est synchronisé avec le Processus B est le point de départ:
Processus asynchrones, d'autre part, ne pas ont leur départ et les points de terminaison synchronisé:
Où les Processus chevauche Un Processus B, ils sont exécutés simultanément ou de façon synchrone (définition du dictionnaire), d'où la confusion.
Mise à JOUR: Charles Bretana amélioration de la sa réponse, de sorte que cette réponse n'est plus qu'un simple (potentiellement simpliste) mnémonique.
Je pense que c'est un peu ronde à propos de l'explication, mais encore il précise à l'aide de la vraie vie exemple.
Petit Exemple:
Disons que la lecture d'un audio comporte trois étapes:
Si votre lecteur audio n'étape 1,2,3 séquentiellement pour chaque chanson, puis elle est synchrone. Vous devrez attendre un certain temps pour entendre la chanson jusqu'à la chanson obtient réellement les cheveux et décompressé.
Si votre lecteur audio n'étape 1,2,3 indépendants les uns des autres, alors il est asynchrone. c'est à dire.
Pendant la lecture audio 1 ( étape 3), si il extrait audio 3 à partir du disque dur en parallèle (étape 1) et il décompresse les données audio 2 en parallèle. (étape 2 )
Vous allez vous retrouver dans l'audition de la chanson sans attendre beaucoup pour récupérer et décompresser.
Simplement dit d'exécution asynchrone est de faire des trucs dans le fond.
Par exemple, si vous souhaitez télécharger un fichier à partir d'internet, vous pourriez utiliser une fonction synchrone pour le faire, mais il permet de bloquer votre thread jusqu'à ce que le fichier téléchargé. Cela peut rendre votre application ne répond pas à toutes les entrées de l'utilisateur.
Au lieu de cela vous pouvez télécharger le fichier en arrière-plan à l'aide de méthode asynchrone. Dans ce cas, la fonction de téléchargement renvoie 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é quand il est terminé.
Modèle de Programmation synchrone – Un thread est affecté à une tâche et commence à travailler sur elle. Une fois la tâche terminée alors qu'il est disponible pour la tâche suivante. Dans ce modèle, il ne peut pas laisser l'exécution de la tâche, à la mi de prendre une autre tâche. Nous allons discuter de la façon dont ce modèle fonctionne en mono et multi-thread environnements.
Mono-thread – Si nous avons quelques tâches à être travaillé et le système actuel prévoit un seul fil, puis les tâches sont affectées à la fil un par un. Il peut être picturalement dépeint comme
Multi-thread – Dans cet environnement, nous avons l'habitude d'avoir plusieurs threads qui peuvent prendre en charge ces tâches et de commencer à travailler sur ce point. Cela signifie que nous avons un pool de threads (nouveaux threads peuvent également être créés sur la base de l'exigence et de ressources disponibles) et des tas de tâches. De sorte que ces thread peut travailler sur ces
Modèle de Programmation asynchrone – Au contraire pour modèle de programmation Synchrone, voici un thread une fois de lancer l'exécution d'une tâche qu'il peut se tenir à la mi, sauvegarder l'état actuel et de lancer l'exécution d'une autre tâche.
Mono-Thread
Multi-Thread
Lire plus ici
Lors de l'exécution d'une séquence de type: a>b>c<d>, si nous obtenons une défaillance dans le milieu de l'exécution comme:
Puis nous re-commencer par le début:
c'est synchrone
Si, toutefois, nous avons la même séquence à exécuter: a>b>c<d>, et nous avons une défaillance dans le milieu:
...mais au lieu de redémarrer depuis le début, nous re-démarrer à partir du point de défaillance:
...c'est de savoir que asynchrone.
Qu'un très simple exemple,
SYNCHRONE
Imaginez 10 élèves de l'école demandé de marcher comme une file d'attente sur une route.
La 3ème étudiant a obtenu son lacet délié. Maintenant, elle a arrêté et attachant de nouveau.
Tous les étudiants derrière son ont arrêté, et sont en attente pour lui de se lié.
Le 1er et le 2ème étudiants ont passé devant tous, et de continuer à leur rythme habituel.
ASYNCHRONE
Imaginez 10 personnes au hasard de marcher sur la même route.
Ils ne sont pas sur une file d'attente bien sûr, juste au hasard de la marche à différents endroits sur la route dans des rythmes différents.
3ème personne du lacet obtenu délié. Elle s'arrêta pour l'obtenir ligoté à nouveau.
Mais personne n'est en attente de son pour l'obtenir à égalité. Tout le monde est encore la marche de la même façon qu'ils le faisaient avant, dans le même rythme de leur.
Vous êtes confus Synchrone avec le Parallèle vs Série. Synchrone signifie tout à la fois. Synchronisé à chaque othere qui peut signifier en série ou à un intervalle fixe. Alors que le programme est en train de faire tous les, il en cours d'exécution en série. Obtenez un dictionnaire...c'est pourquoi nous avons unsweet thé. Vous avez du thé ou du thé sucré.
Synchrone signifie que vous ne pouvez exécuter qu'une seule chose à la fois. Asynchrone signifie que vous pouvez exécuter plusieurs choses à la fois et vous n'avez pas à terminer l'exécution de la chose courante pour passer à la suivante.
Une opération synchrone fait son travail avant de retourner à l'appelant.
Une opération asynchrone n' (la plupart ou la totalité) de ses travaux après le retour à l'appelant.
J'ai créé un gif pour expliquer cela, l'espérance d'être utile:
look, la ligne 3 est asynchrone et d'autres sont synchrones.
toutes les lignes avant la ligne 3, il devrait attendre avant de la ligne de finition de son travail, mais à cause de la ligne 3 est asynchrone, à côté de la ligne (ligne 4), n'attendez pas pour la ligne 3, mais la ligne 5 doit attendre pour la ligne 4 de finir son travail, et de la ligne 6 devrait attendre pour la ligne 5 et 7 pour 6, parce que la ligne de 4,5,6,7 ne sont pas asynchrone.
Un exemple d'instructions pour la fabrication d'un petit-déjeuner
Si vous avez de l'expérience de la cuisson, vous feriez de l'exécution de ces instructions de façon asynchrone. vous commenceriez le réchauffement de la casserole pour les œufs, puis démarrez le bacon. Vous auriez mis le pain dans le grille-pain, puis commencer à les œufs. À chaque étape du processus, vous souhaitez démarrer une tâche, puis tournez votre attention à des tâches qui sont prêts pour votre attention.
La cuisine le petit déjeuner est un bon exemple de asynchrone travail qui n'est pas parallèle. Une personne (ou thread) peut gérer toutes ces tâches. La poursuite de la chambres d'hôtes analogie, une personne peut faire le petit déjeuner de manière asynchrone par le démarrage de la tâche suivante avant la première est terminée. La cuisine progresse si oui ou non quelqu'un le regarde. Dès que vous commencez à le réchauffement de la casserole pour les œufs, vous pouvez commencer à frire le bacon. Une fois 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). On pourrait faire les oeufs, le bacon, et ainsi de suite. Chacun se concentre sur une seule tâche. Chaque cuisinier (ou thread) serait bloqué de manière synchrone en attente pour le bacon à être prêt à renverser, ou le toast à la pop.
De référence de Les concepts de la programmation asynchrone
En ce qui concerne le "en même temps" définition de l'exécution synchrone (qui est parfois source de confusion), voici une bonne façon de le comprendre:
Exécution synchrone: Toutes les tâches au sein d'un bloc de code sont toutes exécutées en même temps.
D'Exécution asynchrone: Toutes les tâches au sein d'un bloc de code ne sont pas toutes exécutées en même temps.
Je pense qu'une bonne façon de penser, il est un classique de course Course de Relais
Synchrone: les Processus à l'instar des membres de la même équipe, ils ne s'exécute jusqu'à ce qu'ils reçoivent baton (fin de l'exécution du processus précédent/coureur) et pourtant ils sont tous agir de synchroniser les uns avec les autres.
Asynchrone: Où les processus comme les membres des différentes équipes sur le même relais de la piste de course, ils se mettront en marche et d'arrêt, async les uns avec les autres, mais à l'intérieur même de la course (dans l'ensemble de l'exécution du programme).
T-il un sens?
Une autre définition anglaise de Synchroniser Ici
Je pense que c'est une meilleure définition que celle de "Passe au même moment". C'est aussi une définition, mais je ne pense pas que c'est celle qui correspond à la façon dont il est utilisé en Informatique.
Donc d'une tâche asynchrone n'est pas coordonné avec d'autres tâches, tandis que synchrone tâche EST coordonné avec d'autres tâches, de sorte que l'un se termine avant que l'autre commence.
Comment cela est réalisé est une autre question.
Synchrone signifie que la file d'attente de l'exécution, un par un, la tâche sera exécutée. Supposons que l'on est seul véhicule qui doivent être partager entre ami pour atteindre leur destination, un par un véhicule, à l'action.
Dans le cas asynchrone, chaque ami peut obtenir de véhicule loué et atteindre sa destination.
Oui synchrone signifie dans le même temps, littéralement, il signifie faire travailler tous ensemble. plusieurs des humains, des objets dans le monde peut faire plusieurs choses en même temps mais si on regarde l'ordinateur, il est dit synchrone à-dire où les processus de travail ensemble, cela signifie que les processus sont dépendants sur le retour de l'un de l'autre et c'est pourquoi ils se exécutées l'une après l'autre dans une séquence appropriée. Alors que asynchrone-à-dire où les processus ne travaillent pas ensemble, ils peuvent travailler en même temps(si vous êtes sur multithread), mais travailler de façon autonome.