Quelle est la différence entre la simultanéité, le parallélisme et les méthodes asynchrones?
Simultanency est d'avoir deux tâches exécutées en parallèle sur des threads séparés. Cependant, les méthodes asynchrones fonctionnent en parallèle mais sur le même fil 1. Comment cela est-il obtenu? Aussi, ce sujet de parallélisme?
quelles sont les différences entre ces trois concepts?
8 réponses
Concurrent et parallèle sont effectivement le même principe que vous supposez correctement, les deux sont liés à des tâches exécutées simultanément bien que je dirais que les tâches parallèles doivent être vraiment multitâches, exécutées "en même temps" alors que concurrent pourrait signifier que les tâches partagent le fil d'exécution tout en semblant encore exécuter en parallèle.
les méthodes asynchrones ne sont pas directement liées aux deux concepts précédents, l'asynchronie est utilisé pour présenter l'impression de tâches simultanées ou parallèles, mais effectivement un appel de méthode asynchrone est normalement utilisé pour un processus qui doit faire le travail loin de l'application actuelle et nous ne voulons pas attendre et bloquer notre application en attendant la réponse.
par exemple, obtenir des données d'une base de données peut prendre du temps, mais nous ne voulons pas bloquer notre interface utilisateur en attendant les données. L'appel asynch prend une référence de rappel et renvoie l'exécution à votre code dès que la demande a été passée avec le système distant. Votre interface utilisateur peut continuer à répondre à l'utilisateur pendant que le système distant effectue le traitement nécessaire, une fois qu'il renvoie les données à votre méthode de rappel, cette méthode peut mettre à jour l'interface utilisateur (ou transférer cette mise à jour) comme il se doit.
du point de vue de l'utilisateur, il semble comme multitâche, mais il ne peut pas être.
MODIFIER
c'est probablement ajoutons que, dans de nombreuses implémentations asynchrone appel de méthode à cause d'un thread pour être lancé, mais il n'est pas essentiel, cela dépend vraiment de l'opération exécutée et dont la réponse peut être notifié à l'arrière du système.
En Bref,
"simultanéité" s'entend de plusieurs tâches qui débutent, s'exécutent et s'achèvent au cours de périodes qui se chevauchent, sans ordre précis. Le parallélisme est lorsque plusieurs tâches ou plusieurs parties d'une tâche unique s'exécutent littéralement en même temps, par exemple sur un processeur multi-core.
rappelez-vous que la concurrence et le parallélisme ne sont pas la même chose.
Différences entre la simultanéité et le parallélisme
énumérons maintenant les différences remarquables entre la concurrence et le parallélisme.
la simultanéité est lorsque deux tâches peuvent commencer, courir et terminer en périodes de temps se chevauchant. Le parallélisme est lorsque les tâches littéralement exécuter en même temps, par exemple. sur un processeur multi-core.
la simultanéité est la composition de processus d'exécution indépendante, tandis que le parallélisme est exécution simultanée de calculs (éventuellement connexes).
la concurrence, c'est faire face à beaucoup de choses en même temps. Le parallélisme, c'est faire beaucoup de choses à la fois.
une application peut être concurrente – mais pas parallèle, ce qui signifie qu'elle traite plus d'une tâche en même temps, mais qu'aucune des deux tâches n'est exécutée en même temps.
une application peut être parallèle – mais pas concurrente, ce qui signifie qu'il traite plusieurs sous-tâches d'une tâche dans un CPU multi-core en même temps.
une application ne peut être ni parallèle ni concurrente, ce qui signifie qu'elle traite toutes les tâches une à une, de façon séquentielle.
une application peut être à la fois parallèle et concurrente, ce qui signifie qu'elle traite plusieurs tâches simultanément dans un CPU multi – core en même temps.
simultanéité
est essentiellement applicable lorsque nous parlons de minimum deux tâches ou plus. Lorsqu'une application est capable d'exécuter deux tâches pratiquement en même temps, nous l'appelons application concurrente. Bien qu'ici les tâches sont exécutées simultanément, mais elles ne le sont pas nécessairement. Ils tirent profit de la fonction de découpage temporel CPU du système d'exploitation où chaque tâche exécuter une partie de sa tâche, puis aller à l'état d'attente. Lorsque la première tâche est en état d'attente, le CPU est affecté à la seconde. tâche complet c'est une partie de la tâche.
système D'exploitation basé sur la priorité des tâches, donc, attribue CPU et d'autres ressources informatiques, par exemple la mémoire; tour à tour vers toutes les tâches et leur donner la chance de terminer. Pour l'utilisateur final, il semble que toutes les tâches sont fonctionnant en parallèle. Cela s'appelle la concurrence.
parallélisme
le parallélisme ne nécessite pas deux tâches pour exister. Littéralement exécuter physiquement des parties de tâches ou des tâches multiples, en même temps en utilisant l'infrastructure multi-core de CPU, en assignant un noyau à chaque tâche ou sous-tâche.
le parallélisme nécessite un matériel avec plusieurs unités de traitement, essentiellement. Dans un CPU à noyau unique, vous pouvez obtenir la simultanéité mais pas parallélisme.
méthodes asynchrones
C'est non liée à la concurrence et au parallélisme, l'asynchronie est utilisée présenter l'impression de tâches concurrentes ou parallèles, mais effectivement un appel de méthode asynchrone est normalement utilisée pour un processus qui doit faire le travail loin de l'application actuelle et nous ne vous voulez attendre et bloquer notre application en attendant la réponse.
Simultanéité est lorsque l'exécution de plusieurs tâches sont entrelacés, au lieu de chaque tâche exécutée séquentiellement l'un après l'autre.
Parallélisme est lorsque certaines tâches sont exécutées en parallèle.
asynchrone est un concept (même s'il est lié dans certains contextes). Il se réfère au fait qu'un événement peut se produire à un autre moment (pas en synchronie) à un autre événement. Les diagrammes ci-dessous illustrent la différence entre une exécution synchrone et asynchrone, où les acteurs peuvent correspondre à différents threads, processus ou même serveurs.
tout le monde a de la difficulté à associer l'asynchrone au parallélisme ou à la simultanéité parce que l'asynchrone n'est pas un antonyme au parallèle ou à la simultanéité. C'est un antonyme de Synchrone. Ce qui indique juste si quelque chose, dans ce cas des threads, sera synchronisé avec quelque chose d'autre, dans ce cas un autre thread.
simultanéité La simultanéité signifie qu'une demande progresse sur plus d'une tâche en même temps (simultanément). Eh bien, si l'ordinateur a seulement un CPU l'application peut ne pas faire de progrès sur plus d'une tâche exactement en même temps, mais plus d'une tâche est traitée à la fois à l'intérieur de l'application. Il ne termine pas complètement une tâche avant de commencer la suivante.
parallélisme Le parallélisme signifie qu'une application divise ses tâches jusqu'à des sous-ensembles plus petits qui peuvent être traités en parallèle, par exemple sur plusieurs CPU au même moment.
concurrence vs. parallélisme en détail Comme vous pouvez le voir, la simultanéité est liée à la façon dont une application gère plusieurs tâches sur lesquelles elle travaille. Une application peut traiter une tâche à la fois (de façon séquentielle) ou travailler sur plusieurs tâches en même temps (simultanément).
Parallélisme d'autre part, est liée à la façon dont une application gère chaque tâche individuelle. Une application peut traiter la tâche en série du début à la fin, ou diviser la tâche en sous-tâches qui peuvent être remplies en parallèle.
comme vous pouvez le voir, une application peut être concurrente, mais pas parallèle. Cela signifie qu'il traite de plusieurs tâches en même temps, mais les tâches ne sont pas décomposées en sous-tâches.
une application peut aussi être parallèle mais non concurrente. Cela signifie que l'application ne fonctionne que sur une tâche à la fois, et cette tâche est décomposée en sous-tâches qui peuvent être traitées en parallèle.
de plus, une demande ne peut être ni concurrente ni parallèle. Cela signifie qu'il fonctionne sur une seule tâche à la fois, et la tâche n'est jamais décomposées en sous-tâches pour l'exécution en parallèle.
enfin, une application peut aussi être à la fois concurrente et parallèle, en ce qu'elle fonctionne à la fois sur plusieurs tâches en même temps, et casse également chaque tâche en bas dans les sous-ensembles pour l'exécution parallèle. Toutefois, certains des avantages de la concurrence et du parallélisme peuvent être perdus dans ce scénario, car les CPU de l'ordinateur sont déjà assez occupés avec la concurrence ou le parallélisme seulement. Le fait de le combiner peut n'entraîner qu'un faible gain de performance ou même une perte de performance. Assurez-vous d'analyser et de mesurer avant d'adopter un tel modèle parallèle à l'aveuglette. De http://tutorials.jenkov.com/java-concurrency/concurrency-vs-parallelism.html
CONCURRENCE VS PARALLÉLISME: simultanéité à un moment donné, une seule tâche peut être effectuée. exemple: un seul processeur parallélisme à un moment donné, nous pouvons accomplir plusieurs tâches. exemple: processeur dual core ou multi core
parallèle: c'est un terme large qui signifie que deux morceaux de code exécutent" en même temps "au point où l'exécution parallèle devient"réelle". Des sons vagues et simpliste? Oui. J'essaie de vous aider à vous concentrer sur les différences entre ces concepts plutôt que de fournir chaque définition technique individuelle.
donc j'ai écrit" réel " parce que le parallélisme peut être simulé à un certain degré. Beaucoup les systèmes, par exemple les jeux, mettent en œuvre des sous-systèmes" parallèles " qui effectuent beaucoup de tâches au cours de chaque boucle d'exécution (par exemple: certains d'entre eux font largement appel à des agents), mais la plupart du temps ils ne sont que parallèles dans le sens où ils font chacun leur petite chose dans un prévisible ordre, l'accès aux données apparemment au hasard, et même si vous avez mis en œuvre une sorte de logiciel primitif basé sur coopérative multitâche pour organiser la chose entière, il est toujours pas vraiment parallèle. C'est juste un système séquentiel très compliqué.
vous pourriez dire que le parallélisme devient réel quand il y a un système tiers (qu'il s'agisse d'un OS préventif sous-jacent offrant des threads, ou des noyaux CPU) spécifiquement conçu pour exécuter du code dans des boîtes noires que vous ne pouvez pas contrôler (sauf pour le moment où ils commencent et le résultat qu'ils produisent, plus tout mutex ou sémaphore que vous pourriez jeter dedans)
Concurrent: il ne peut y avoir de concurrence sans parallélisme (simulé ou réel, comme je l'ai expliqué ci-dessus), mais ce terme se concentre spécifiquement sur le fait que les deux systèmes vont essayer d'accéder à la même ressource en même temps à un moment donné. Il met l'accent sur le fait que vous allez avoir à traiter avec cela.
asynchrone : tout le monde a raison en disant que l'asynchrone est sans rapport avec le parallélisme, mais il ouvre la voie à lui (le fardeau est sur vous de faire les choses parallèles ou non-continuez à lire).
vous pourriez voir ce concept comme un moyen de représenter le parallélisme en formalisant les trois choses de base habituellement impliquées dans le parallélisme : 1) Définir l'initialisation de la tâche (dire quand elle commence et quels paramètres elle obtient), 2) ce qui doit être fait après qu'elle se termine et 3) ce que le code devrait continuer à faire entre les deux.
mais c'est toujours seulement de la syntaxe (habituellement c'est représenté comme des méthodes de callback). Derrière la scène, le système sous-jacent pourrait simplement décider que ces soi-disant "tâches" ne sont que des fragments de code à empiler jusqu'à ce qu'il termine le code qu'il exécute actuellement. Et puis il les dépouille un par un et les exécute séquentiellement. Ou pas. Il peut aussi créer un thread par tâche et les exécuter en parallèle. Qui s'en soucie? Cette partie n'est pas incluse dans le concept;)
Voici que j'explique avec quelques exemples
simultanéité
Un web service reçoit beaucoup de petites demandes en temps réel, et il doit gérer chacune de ces demandes différemment comme indépendante des autres demandes.
- beaucoup tâches sont exécutés
- dans en temps réel
-
avec différentes séquences d'exécution (il peut y avoir plusieurs tâches ou une tâche peuvent être exécutées différemment dans chaque appel)
-
réduit essentiellement le temps de réponse
"
parallélisme
UN GPU utilise le traitement parallèle de processus le même bloc de code (AKA kernel ) sur des milliers de fils physiques et logiques. Chaque appel du noyau utilise parfois un bloc de mémoire différent pour ses opérations de lecture/écriture. Idéalement, le processus commence et se termine pour tous les threads en même temps. Un seul noyau CPU sans hyperthreading ne peut pas faire de traitement en parallèle.
- un noyau est exécuté sur plusieurs processeurs
- en même temps, les 151980920"
- avec une séquence d'exécution unique (il y a un noyau dans lequel la ramification ou si est évitée)
- augmente essentiellement la vitesse
asynchrone
One heavy process (comme une opération d'E/S) peut facilement block GUI si elle est exécutée sur le fil GUI. Afin garantie UI responsibility , un procédé lourd peut être exécuté de manière asynchrone. Il est préférable d'exécuter des opérations async similaires une à la fois . par exemple, des opérations multiples liées à des IO peuvent être significativement plus lentes si elles sont exécutées en même temps, il est donc préférable de file les Terminer pour commencer
- un tâche ou un lot de tâches est exécuté sur un autre filetage
- une seule fois ou un-à-un-temps
- de la séquence d'exécution n'a pas d'importance/appliquer car il n'y a pas de simultanéité
- réduit essentiellement la vitesse, mais offre une réponse à un autre fil
Note: opération async qui est exécutée simultanément (c.-à-d. plus d'une fois à la fois).) est une opération simultanée.