La simultanéité consiste à exécuter deux tâches en parallèle sur des threads distincts. Cependant, les méthodes asynchrones s'exécutent en parallèle mais sur le même 1 thread. Comment cela est-il réalisé? Aussi, qu'en est-il du parallélisme?
Quelles sont les différences entre ces 3 concepts?
Concurrent et parallèle sont en réalité le même principe que vous supposez, 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 véritablement multitâches, exécutées "en même temps", alors que concurrentes pourraient signifier que les tâches se partagent le même thread d'exécution tout en semblant toujours être en cours d'exécution en parallèle.
Les méthodes asynchrones ne sont pas directement liées aux deux concepts précédents, l’asynchronisme est utilisé pour présenter l’impression de tâches simultanées ou parallèles, mais dans les faits, un appel de méthode asynchrone est normalement utilisé pour un processus devant s’appliquer en dehors de l’application en cours. 't veulent attendre et bloquer notre application en attente de 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 attente de données. L'appel async prend une référence de rappel et renvoie l'exécution à votre code dès que la demande a été envoyée au système distant. Votre interface utilisateur peut continuer à répondre à l'utilisateur pendant que le système distant effectue le traitement requis. Une fois qu'il a renvoyé les données à votre méthode de rappel, cette méthode peut alors mettre à jour l'interface utilisateur (ou transférer cette mise à jour) selon les besoins.
Du point de vue de l'utilisateur, cela ressemble à du multitâche, mais ce n'est peut-être pas le cas.
MODIFIER
Il convient probablement d'ajouter que dans de nombreuses implémentations, un appel de méthode asynchrone entraînera la création d'un thread, mais ce n'est pas essentiel, cela dépend vraiment de l'opération en cours d'exécution et du mode de notification de la réponse au système.
En bref,
La simultanéité signifie plusieurs tâches qui démarrent, s'exécutent et se terminent dans des périodes qui se chevauchent, sans ordre spécifique. Le parallélisme est lorsque plusieurs tâches OR 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 concurrence et parallélisme
Maintenant, énumérons les différences remarquables entre la concurrence et le parallélisme.
La simultanéité se produit lorsque deux tâches peuvent démarrer, s'exécuter et se terminer dans des périodes qui se chevauchent. Le parallélisme est lorsque des tâches s'exécutent littéralement au même moment, par exemple. sur un processeur multi-core.
La simultanéité est la composition de processus exécutant indépendamment, tandis que le parallélisme est l'exécution simultanée de calculs (éventuellement liés).
La simultanéité consiste à traiter beaucoup de choses à la fois. Le parallélisme consiste à 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 à la fois, mais qu’elle n’exécute pas deux tâches en même temps.
Une application peut être parallèle, mais pas concurrente, ce qui signifie qu’elle traite simultanément plusieurs sous-tâches d’une tâche dans une CPU multicœur.
Une application ne peut être ni parallèle ni concurrente, ce qui signifie qu'elle traite toutes les tâches une à la fois, de manière séquentielle.
Une application peut être à la fois parallèle et simultanée, ce qui signifie qu’elle traite simultanément plusieurs tâches simultanément dans un processeur multicœur.
Concurrence
La concurrence 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 au même moment, nous appelons cela une application concurrente. Bien qu'ici les tâches exécutées ressemblent à la fois, mais essentiellement, elles ne PEUVENT pas…. Ils tirent parti de la fonctionnalité de découpage temporel du processeur du système d'exploitation où chaque tâche exécute une partie de sa tâche puis passe à l'état d'attente . Lorsque la première tâche est en attente, la CPU est affectée à la deuxième tâche à complète cela fait partie de la tâche.
Système d'exploitation basé sur la priorité des tâches, attribue donc CPU et autres ressources informatiques, par exemple Mémoire; tour à tour à toutes les tâches et leur donner la chance de terminer. Pour l'utilisateur final, il semble que toutes les tâches sont courir en parallèle. Ceci s'appelle la simultanéité.
Parallélisme
Le parallélisme ne nécessite pas deux tâches pour exister. C'est littéralement exécuter physiquement des parties de tâches OR plusieurs tâches en même temps en utilisant une infrastructure multi-core de CPU, en assignant un core à chaque tâche ou sous-tâche.
Le parallélisme nécessite du matériel avec plusieurs unités de traitement, essentiellement. Dans un processeur simple cœur, vous pouvez obtenir une concurrence mais PAS parallélisme.
Méthodes asynchrones
Ce n'est pas lié à la concurrence et au parallélisme, l'asynchronisme est utilisé 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 cela doit fonctionner loin de l'application actuelle et nous ne le faisons pas vouloir attendre et bloquer notre application en attente de la réponse.
Concurrency est le moment où l'exécution de plusieurs tâches est entrelacée, au lieu que chaque tâche soit exécutée séquentiellement l'une après l'autre.
Parallélisme est le moment où ces tâches sont réellement exécutées en parallèle.
Asynchrony est un concept distinct (même s'il est lié dans certains contextes). Il fait référence au fait qu'un événement peut se produire à un moment différent (pas de manière synchronisée) d'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 du mal à s’associer de manière asynchrone au parallélisme ou à la concurrence, car asynchrone n’est pas un antonyme parallèle ou simultané. C'est un antonyme de synchrone. Ce qui indique simplement si quelque chose, dans ce cas les threads, sera synchronisé avec autre chose, dans ce cas un autre thread.
Simultanéité
La simultanéité signifie qu'une application progresse sur plusieurs tâches à la fois (simultanément). Eh bien, si l'ordinateur ne dispose que d'un seul processeur, l'application ne peut pas progresser sur plus d'une tâche exactement au même moment, mais plusieurs tâches sont en cours de traitement à la fois dans 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 en sous-tâches plus petites pouvant être traitées en parallèle, par exemple sur plusieurs processeurs au même moment.
Concurrence vs parallélisme en détail
Comme vous pouvez le constater, la simultanéité est liée à la manière dont une application gère plusieurs tâches sur lesquelles elle fonctionne. Une application peut traiter une tâche à la fois (de manière séquentielle) ou travailler sur plusieurs tâches à la fois (simultanément).
D'autre part, le parallélisme est lié à la manière dont une application gère chaque tâche. Une application peut traiter la tâche en série du début à la fin ou la scinder en sous-tâches pouvant être exécutées en parallèle.
Comme vous pouvez le constater, une application peut être concurrente, mais pas parallèle. Cela signifie qu'il traite plus d'une tâche à la fois, mais que les tâches ne sont pas décomposées en sous-tâches.
Une application peut également être parallèle mais non concurrente. Cela signifie que l'application ne fonctionne que sur une tâche à la fois et que cette tâche est divisée en sous-tâches pouvant être traitées en parallèle.
De plus, une application ne peut être ni concurrente ni parallèle. Cela signifie que cela ne fonctionne que sur une tâche à la fois et que la tâche n'est jamais décomposée en sous-tâches pour une exécution parallèle.
Enfin, une application peut également être à la fois concurrente et parallèle, en ce sens qu'elle fonctionne simultanément sur plusieurs tâches et qu'elle décompose chaque tâche en sous-tâches pour une exécution en parallèle. Toutefois, certains des avantages de la simultanéité et du parallélisme peuvent être perdus dans la mesure où les processeurs de l'ordinateur sont déjà suffisamment occupés par la simultanéité ou le parallélisme. La combinaison peut ne générer qu'un faible gain de performance, voire une perte de performance. Assurez-vous d’analyser et de mesurer avant d’adopter aveuglément un modèle parallèle simultané.
De http://tutorials.jenkov.com/Java-concurrency/concurrency-vs-parallelism.html
Parallèle: C'est un terme large qui signifie que deux morceaux de code l'exécutent "en même temps" jusqu'au point où l'exécution en parallèle devient "réelle". Cela semble vague 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.
J'ai donc écrit "real" car le parallélisme peut être simulé dans une certaine mesure. De nombreux systèmes, par exemple des jeux, implémentent des sous-systèmes "parallèles" qui effectuent de nombreuses tâches à chaque boucle d'exécution (par exemple, certains utilisent énormément d'agents), mais la plupart du temps, ils ne sont parallèles que chacun fait sa petite chose dans aucun ordre {prévisible, accède à des données apparemment aléatoires, et même si vous implémentiez une sorte de multitâche primitif coopératif basé sur un logiciel pour organiser tout, ce n'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 lorsqu'il existe un système tiers (qu'il s'agisse d'un système d'exploitation préemptif sous-jacent ou de cœurs de processeur) spécialement conçu pour exécuter du code dans des boîtes noires que vous ne pouvez pas contrôler (sauf pour le moment où elles commencer et le résultat qu'ils produisent, plus tout mutex ou sémaphores que vous pourriez jeter)
Concurrent: il ne peut y avoir de simultanéité sans parallélisme (simulé ou réel, comme je l'ai expliqué ci-dessus), mais ce terme est spécifiquement axé sur le fait que les deux systèmes tenteront d'accéder à la même ressource en même temps à un moment donné. Cela met l'accent sur le fait que vous allez devoir vous en occuper.
Asynchrone : tout le monde a raison de dire que l'asynchrone n'a aucun lien avec le parallélisme, mais il en ouvre la voie (il vous incombe de rendre les choses parallèles ou non - continuez à lire).
Vous pouvez voir ce concept comme un moyen de représenter parallélisme en formalisant les trois choses fondamentales généralement impliquées dans le parallélisme: 1) définir l'initialisation de la tâche (par exemple, quand elle commence et quels paramètres elle obtient), 2) être fait après avoir fini et 3) Ce que le code devrait continuer à faire entre les deux.
Mais ce n'est toujours que la syntaxe (habituellement, elle est représentée par des méthodes de rappel). En coulisse, le système sous-jacent peut simplement décider que ces tâches dites ne sont que des fragments de code à empiler jusqu'à la fin du code en cours d'exécution. Et puis il les dépile un par un et les exécute de manière séquentielle. Ou pas. Il peut également créer un thread par tâche et les exécuter en parallèle. On s'en fout? Cette partie n'est pas incluse dans le concept;)
Il existe plusieurs scénarios dans lesquels la simultanéité peut se produire:
Asynchrony - Cela signifie que votre programme effectue des opérations non bloquantes. Par exemple, il peut lancer une requête pour une ressource distante via HTTP, puis effectuer une autre tâche en attendant la réponse. C’est un peu comme quand vous envoyez un courrier électronique puis continuez votre vie sans attendre de réponse.
Parallélisme - Cela signifie que votre programme exploite le matériel de machines multicœurs pour exécuter des tâches simultanément en décomposant le travail en tâches, chacune exécutée sur un cœur séparé. C’est un peu comme chanter sous la douche: vous faites deux choses exactement au même moment.
Multithreading - Il s'agit d'une implémentation logicielle permettant à différents threads d'être exécutés simultanément. Un programme multithread semble faire plusieurs choses en même temps, même s’il s’exécute sur une machine monocœur. C'est un peu comme discuter avec différentes personnes via différentes fenêtres de messagerie instantanée. Bien que vous changiez réellement d’aller-retour, le résultat final est que vous avez plusieurs conversations en même temps.
Il y a un peu de sémantique à éclaircir ici:
La simultanéité ou le parallélisme est une question de conflit de ressources alors qu'Asynchrone est à propos de flux de contrôle.
Différentes procédures (ou leurs constituants {opérations) sont appelées asynchrones, lorsqu'il n'y a pas d'implémentation déterministe de l'ordre de leur traitement; en d'autres termes, il est probable que l'un d'entre eux puisse être traité à un moment donné T. Par définition, plusieurs processeurs (par exemple, des CPU ou des personnes) permettent à plusieurs d'entre eux d'être traités en même temps; sur un seul processeur, leur traitement est entrelacé (par exemple, Threads).
Les procédures ou opérations asynchrones sont appelées simultanées lorsqu'elles partagent des ressources; La simultanéité est la possibilité définitive de conflit à tout moment. T. Le parallélisme est garanti de manière triviale lorsqu'aucune ressource n'est partagée (par exemple, un processeur et une mémoire différents); sinon, le contrôle de concurrence doit être adressé.
Par conséquent, une procédure ou une opération asynchrone peut être traitée en parallèle ou simultanément avec d’autres.
CONCURRENCE ET PARALLELISME: Accès simultané à un moment donné, une seule tâche peut être effectuée. exemple: processeur simple d'unité centrale parallélisme à un moment donné, nous pouvons effectuer plusieurs tâches. exemple: processeur dual core ou multi core