Asynchrone vs Multithreading - Est-il une différence?
Fait un appel asynchrone toujours créer un nouveau thread? Quelle est la différence entre les deux?
Fait un appel asynchrone toujours créer ou utiliser un nouveau thread?
Dans la programmation informatique, les événements asynchrones sont ceux qui se produisent indépendamment du flux de programme. Asynchrone actions sont des actions exécutées dans un non-système de blocage, permettant le programme principal flux de poursuivre le traitement.
Je sais que les appels asynchrones peut être fait sur un seul fils? Comment est-ce possible?
- social.msdn.microsoft.com/Forums/en/csharplanguage/thread/...
- JavaScript n'a pas de fils, mais il n'ont asynchrone appels de méthode.
- Tout système où un processus gère plusieurs sous-processus, les processus de contrôle peut fournir de l'opération asynchrone de la sous-processus. Dans le cas du JavaScript, le navigateur fournit le calcul de flux. Lorsque la fonction fait un appel asynchrone, le navigateur peut stocker le contexte de cette fonction. Maintenant que même navigateur unique thread peut modifier le contexte de reprendre l'exécution d'une autre fonction. Alors que dans les traditionnels programmes multi-thread, un thread d'exécution de l'un des blocs de fonction pour permettre à un autre thread pour exécuter une fonction différente. Chaque thread effectue sa propre fonction de manière synchrone.
Vous devez vous connecter pour publier un commentaire.
Cette question est sacrément près de trop pour y répondre.
Dans le cas général, un appel asynchrone n'est pas nécessairement la création d'un nouveau thread. C'est une façon de la mettre en œuvre, avec un pré-existants pool de threads ou processus externe et d'autres moyens. Il dépend fortement de la langue, de l'objet modèle (le cas échéant), et de l'environnement d'exécution.
Asynchrone signifie que le thread appelant ne pas s'asseoir et attendre pour la réponse, ni ne l'asynchrone activité arriver dans le thread appelant.
Au-delà, vous allez avoir besoin de faire plus précis.
Chaque fois que l'opération qui doit se faire de manière asynchrone ne nécessite pas le CPU pour faire un travail, que l'opération peut être effectuée sans frai un autre thread. Par exemple, si l'opération asynchrone est I/O, le CPU ne pas avoir à attendre pour les I/O pour valider. Il a juste besoin de commencer l'opération, et peut ensuite passer à d'autres travaux, tout le matériel d'e/S (contrôleur de disque, interface réseau, etc.) le I/O de travail. Le matériel permet au PROCESSEUR de savoir quand il est terminé par l'interruption du PROCESSEUR et l'OS délivre alors l'événement à votre application.
Fréquemment des abstractions de niveau supérieur et les Api de ne pas exposer le sous-jacent asynchrone de l'API est disponible à partir de l'OS et le matériel sous-jacent. Dans ces cas, il est généralement plus facile de créer des threads pour faire des opérations asynchrones, même si le pondu thread est juste en attente sur une opération d'e/S.
Si l'opération asynchrone nécessite le CPU pour faire un travail, puis généralement, cette opération doit se faire dans un autre thread, afin d'être vraiment asynchrone. Même alors, il ne sera véritablement asynchrone si il n'y a plus d'une unité d'exécution.
Non, des appels asynchrones n'impliquent pas toujours threads.
Ils font généralement début d'une opération, qui se poursuit en parallèle avec l'appelant. Mais cette opération peut être gérée par un autre processus, par le système d'exploitation, par d'autres périphériques (comme un contrôleur de disque), par un autre ordinateur sur le réseau, ou par un être humain. Les Threads ne sont pas la seule façon de faire les choses en parallèle.
Multi threading se réfère à plus d'une opération qui se produit dans le même processus. Tandis que la programmation asynchrone se propage à travers les processus. Par exemple, si mes opérations appelle un service web, Le fil n'a pas besoin d'attendre que le service web renvoie. Ici, nous utilisons la programmation asynchrone qui permet au thread de ne pas attendre d'un processus dans une autre machine pour terminer. Et quand il commence à obtenir la réponse du service web, il peut interrompre le thread principal pour dire que le service web a terminé le traitement de la demande. Maintenant, le thread principal peut traiter le résultat.
Windows toujours eu de traitement asynchrone depuis la non préemptif fois (versions 2.13, 3.0, 3.1, etc) à l'aide de la boucle de message, avant d'appuyer des threads. Donc, pour répondre à votre question, non, il n'est pas nécessaire de créer un thread pour effectuer le traitement asynchrone.
JavaScript est monothread et asynchrone. Lorsque vous utilisez XmlHttpRequest, par exemple, vous fournir avec une fonction de rappel qui sera exécutée de manière asynchrone lorsque la réponse renvoie.
John Resig a une bonne explication de la question connexe de la façon dont minuteries de travail en JavaScript.
Des appels asynchrones n'ont même pas besoin de se produire sur le même système/appareil comme une invocation de l'appel. Donc, si la question est, est un appel asynchrone besoin d'un thread dans le processus actuel, la réponse est non. Cependant, il doit y avoir un thread d'exécution, quelque part, le traitement de la requête asynchrone.
L'exécution du Thread est un terme vague. Dans une coopérative de tâches des systèmes tels que le début de Macintosh et Windows OS es, le thread d'exécution pourrait être tout simplement le même processus qui a fait la demande l'exécution d'une autre pile, pointeur d'instruction, etc... Cependant, quand les gens en général parler des appels asynchrones, ils signifient généralement les appels sont traités par un autre thread si elle est intra-processus (par exemple, dans le même processus) ou par un autre processus s'il est inter-processus.
Noter que l'inter-processus (ou interprocess communication (IPC) est couramment généralisés à l'intra-processus de communication, depuis les techniques de verrouillage, et la synchronisation des données sont généralement de la même indépendamment de ce processus, les threads séparés de l'exécution en.
Certains systèmes vous permettent de profiter de la concurrence dans le noyau de certaines installations utilisant les rappels. Pour une obscure exemple, asynchrone IO rappels ont été utilisés pour mettre en œuvre les non-blocage de l'internet se coupe de retour dans le pas-multitâche préemptif jours de Mac Système 6-8.
Cette façon, vous avez une exécution simultanée des flux "dans" vous avez du programme sans fils en tant que tel.
Asynchrone signifie simplement que vous ne bloquez pas votre programme en attente de quelque chose (appel de fonction, périphérique, etc.) à la fin. Il peut être mis en œuvre dans un thread séparé, mais il est également fréquent d'utiliser un thread dédié synchrone de tâches et de communiquer par une sorte de système d'événements et de réaliser ainsi asynchrone comme comportement.
Il y a des exemples de mono-thread asynchrone programmes. Quelque chose comme:
La nature des appels asynchrones est telle que, si vous souhaitez que l'application continue de fonctionner pendant que l'appel est en cours, vous devrez soit frayer un nouveau fil de discussion, ou au moins utiliser un autre fil de discussion que vous avez créé uniquement à des fins de gestion asynchrone des rappels.
Parfois, selon la situation, vous pouvez invoquer une méthode asynchrone, mais de le faire apparaître à l'utilisateur d'être synchrone (c'est à dire bloquer jusqu'à ce que la méthode asynchrone a signalé qu'il est complet). Ceci peut être réalisé à travers des Api Win32, telles que WaitForSingleObject.