Quelle est la différence entre les appels Asynchrones et les Rappels
Je suis peu confus pour comprendre la différence entre des appels Asynchrones et Rappels.
J'ai lu cette messages qui enseigner à propos des Rappels mais aucune des réponses adresses en quoi elle diffère des appels Asynchrones.
Est-ce Rappels = les Expressions Lambda?
Rappels sont en cours d'exécution dans un thread différent?
Quelqu'un peut explique cette avec la plaine simple d'anglais?
effectivement une très bonne question. Jamais l'esprit de la merde cerveaux de marquage vous en bas 😉
OriginalL'auteur Jude Niroshan | 2016-03-25
Vous devez vous connecter pour publier un commentaire.
Très simplement, un rappel n'a pas besoin d'être asynchrone.
En Java, C et C#, "rappels" sont généralement synchrones (par rapport à un "main event loop").
En Javascript, d'autre part, des rappels sont généralement asynchrone - vous de passer une fonction qui sera appelé ... mais d'autres événements continueront à être traitées jusqu'à ce que le callback n'est appelé.
Si vous ne vous souciez pas de ce que Javascript événements se produisent dans l'ordre - grand. Sinon, un mécanisme très puissant pour la gestion du comportement asynchrone en Javascript est d'utiliser des "promesses":
http://www.html5rocks.com/en/tutorials/es6/promises/
PS:
Pour répondre à vos autres questions:
Oui, un rappel peut être un lambda - mais ce n'est pas une exigence.
En Javascript, juste au sujet de chaque rappel sera une "fonction anonyme" (en fait un "lambda expression").
Oui, rappels, peut être invoqué à partir d'un autre thread, mais c'est certainement pas une exigence.
Rappels peuvent aussi (et souvent) frayer un thread (et donc de faire eux-mêmes "asynchrone").
'Espère que ça aide
====================================================================
Salut, Encore Une Fois:
Nous avons besoin d'abord de s'entendre sur une définition de "rappel". Voici une bonne:
Nous devons également définir "synchrone" et "asynchrone". Bref, si un rappel fait tout le travail avant de retourner à l'appelant, c'est "synchrone". Si l'on peut retourner à l'appelant immédiatement après il est invoqué - et que l'appelant et le rappel peuvent travailler en parallèle, c'est "asynchrone".
Le problème avec synchrone rappels, c'est qu'ils peuvent apparaître à "accrocher". Le problème avec les rappels asynchrones est que vous pouvez perdre le contrôle de la "commande" - vous ne pouvez pas garantir que "Un" avant "B".
Commune des exemples de rappels comprennent:
a) d'appuyer sur un bouton gestionnaire (chaque "bouton" est différent de "réaction"). Ce sont généralement invoqués "asynchronousy" (par l'interface graphique de la boucle principale).
b) une sorte de "comparer" fonction (ainsi, une commune "trier()" fonction peut gérer différents types de données). Ce sont généralement invoqués "synchrone" (appelé directement par votre programme).
UN EXEMPLE CONCRET:
a) j'ai un "C" programme de langue avec un "print()" fonction.
b) "print()" est conçu pour utiliser l'un des trois rappels: "PrintHP()", "PrintCanon()" et "PrintPDF()".
c) "PrintPDF()" appelle une bibliothèque pour rendre mes données au format PDF. Il est synchrone, le programme n'a pas de retour en arrière à partir de "print()" jusqu'à ce que l' .pdf le rendu est terminé. Il va généralement assez rapidement, donc il n'y a pas de problème.
d) j'ai codé "PrintHP()" et "PrintCanon()" pour frayer threads pour faire les e/S de l'imprimante physique. "Print()" quitte dès que le thread est créé; le "impression" va en parallèle avec l'exécution du programme. Ces deux rappels sont "asynchrone".
Q: un sens? Est-ce que c'?
Vogel612 - je me suis dit explicitement une fonction de rappel n'est PAS équivalent à "asynchrone". I
pouvez-vous veuillez expliquer avec un exemple comment le rappel et appel asynchrone fonctionne dans le flux d'exécution? Qui sera grandement utile
OriginalL'auteur paulsm4
Qu'ils sont assez semblables, mais c'est juste des mutuelles.
Lorsque vous utilisez des rappels de vous préciser la méthode qui devrait vous devrait être appelé en arrière sur et vous comptez sur les méthodes de vous appeler pour vous rappeler. Vous pouvez spécifier votre appel vers la fin de n'importe où, et vous n'êtes pas garanti d'être rappelée.
Dans la programmation Asynchrone, la pile d'appel devrait se détendre à la position de départ, tout comme en mode de programmation synchrone.
Mise en garde: je suis pensons en particulier à la C# attendent fonctionnalités comme il y a d'autres async techniques.
voici un upvote 😉
OriginalL'auteur user1763100