144 votes

Asynchrone vs multithreading, y a-t-il une différence?

Un appel asynchrone toujours créer un nouveau thread? Quelle est la différence entre les deux?

EDIT:

Un appel asynchrone toujours créer ou utiliser un nouveau thread?

Wikipédia dit:

Dans la programmation, 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?

108voto

karunski Points 2067

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.

Souvent 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.

86voto

Michael Kohne Points 8233

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.

21voto

Jason Orendorff Points 15869

Non, les appels asynchrones n’impliquent pas toujours les discussions.

Ils généralement commencent une sorte d’opération qui se poursuit en parallèle avec l’appelant. Mais cette opération pourrait être gérée par un autre processus, par le système d’exploitation, par autres matériels (comme un contrôleur de disque), par un autre ordinateur sur le réseau, soit par un être humain. Discussions ne sont pas la seule façon d’obtenir des résultats concrets en parallèle.

12voto

Otávio Décio Points 44200

Windows a toujours eu un traitement asynchrone depuis les temps non préemptifs (versions 2.13, 3.0, 3.1, etc.) en utilisant la boucle de message, bien avant de prendre en charge les vrais threads. Donc, pour répondre à votre question, non, il n'est pas nécessaire de créer un thread pour effectuer un traitement asynchrone.

8voto

Mike Points 643

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, le 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.

Notez 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 de l'exécuter.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X