Quelle est la différence entre la concurrence, le parallélisme et les méthodes asynchrones?

178

La concurrence 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 thread. Comment cela est-il réalisé? Et qu'en est-il du parallélisme?

Quelles sont les différences entre ces 3 concepts?

GurdeepS
la source
8
Le terme «asynchrone» peut signifier beaucoup de choses différentes. Ces termes sont liés, mais ils ne décrivent pas des ensembles disjoints de choses. Les significations se chevauchent et varient selon la situation.
Pointy
2
La première simultanéité exécute donc deux processus ou plus en même temps. Avec cela à l'écart, être concurrent n'est pas parallèle. Les processus parallèles nécessitent deux cœurs ou plus, tandis que les processus simultanés peuvent partager dans le temps un seul cœur.
Rick O'Shea

Réponses:

139

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, même si je dirais que les tâches parallèles devraient être vraiment multitâches, exécutées «en même temps» alors que concurrentes pourrait signifier que les tâches partagent le thread d'exécution tout en semblant toujours s'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ée 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 travailler loin de l'application actuelle et nous ne ne veux pas attendre et bloquer notre application en attendant la réponse.

Par exemple, obtenir des données à partir 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 asynchrone prend une référence de rappel et renvoie l'exécution à votre code dès que la demande a été placée auprès du 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 a renvoyé les données à votre méthode de rappel, cette méthode peut mettre à jour l'interface utilisateur (ou transférer cette mise à jour) selon le cas.

Du point de vue de l'utilisateur, cela ressemble à du multitâche, mais ce n'est peut-être pas le cas.


ÉDITER

Cela vaut probablement la peine d'ajouter que dans de nombreuses implémentations, un appel de méthode asynchrone provoquera la rotation d'un thread, mais ce n'est pas essentiel, cela dépend vraiment de l'opération en cours d'exécution et de la manière dont la réponse peut être notifiée au système.

Lazare
la source
34
Je dirais que vous avez mélangé le parallélisme et la concurrence dans votre premier paragraphe. La concurrence fait référence à la gestion de plusieurs threads d'exécution, où le parallélisme est plus spécifiquement, plusieurs threads d'exécution s'exécutant simultanément. La concurrence est le terme plus large qui peut englober le parallélisme.
Mark H
7
Bien que les deux mots soient très similaires et puissent être confondus (et le sont souvent), ils ont des définitions différentes: Concurrent = existant, en cours ou fait en même temps. Parallèle = de ou se rapportant à la performance apparente ou réelle de plus d'une opération à la fois, par le même ou des dispositifs différents. Comme vous pouvez le voir, parallèle ne signifie pas nécessairement simultané, mais pourrait simplement apparaître comme simultané. À la fin de la journée, les mots sont souvent utilisés de manière interchangeable et avec n dev est une pièce, vous obtiendrez probablement n + 1 définitions;)
Lazarus
3
@Mehrdad Si vous allez baser vos définitions des mots du dictionnaire sur leur utilisation dans les documents marketing, je pense que vous risquez de vous trouver un peu désavantagé.
Lazarus
6
Faux. Dans le contexte de la programmation, la concurrence est la capacité de votre code à être «composé» en bits de logique qui pourraient être exécutés en même temps. Le parallélisme (lorsqu'il est combiné avec la concurrence) consiste à prendre ledit code et à l'exécuter sur une machine à 100 cœurs.
Frank Radocaj
2
@FrankRadocaj a raison. Concurrent signifie que le programme peut être divisé en unités (les unités étant essentiellement des threads) qui peuvent être exécutées dans n'importe quel ordre et avoir un résultat déterminé. Parallèle signifie que ces unités / threads sont exécutés littéralement en même temps sur plusieurs processeurs.
89

En bref,

La simultanéité signifie plusieurs tâches qui démarrent, s'exécutent et se terminent dans des périodes de temps qui se chevauchent, sans ordre spécifique. Le parallélisme se produit 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 multicœur.

N'oubliez pas que la concurrence et le parallélisme ne sont PAS la même chose.

Différences entre la concurrence et le parallélisme

Maintenant, énumérons les différences remarquables entre la concurrence et le parallélisme.

La concurrence est le moment où deux tâches peuvent démarrer, s'exécuter et se terminer dans des périodes qui se chevauchent. Le parallélisme est lorsque les tâches s'exécutent littéralement en même temps, par exemple. sur un processeur multicœur.

La concurrence est la composition de processus exécutés indépendamment, tandis que le parallélisme est l'exécution simultanée de calculs (éventuellement liés).

La concurrence consiste à gérer 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 en même temps, mais aucune tâche ne s'exécute en même temps.

Une application peut être parallèle - mais pas simultanée, ce qui signifie qu'elle traite plusieurs sous-tâches d'une tâche dans un processeur multicœur 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 par une, séquentiellement.

Une application peut être à la fois parallèle et concurrente, ce qui signifie qu'elle traite plusieurs tâches simultanément dans un processeur multicœur en même temps.

Concurrence

La concurrence est essentiellement applicable lorsque nous parlons d'au moins deux tâches ou plus. Lorsqu'une application est capable d'exécuter deux tâches virtuellement en même temps, nous l'appelons application simultanée. Bien qu'ici, les tâches exécutées semblent simultanées, mais elles PEUVENT essentiellement ne pas l'être. Ils tirent parti de la fonction de découpage du temps CPU 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 état d'attente, le processeur est affecté à la deuxième tâche pour terminer sa partie de la tâche.

Le système d'exploitation basé sur la priorité des tâches attribue ainsi la CPU et d'autres ressources informatiques, par exemple la mémoire; tour à tour à toutes les tâches et leur donner la chance de les terminer. Pour l'utilisateur final, il semble que toutes les tâches s'exécutent en parallèle. C'est ce qu'on appelle la concurrence.

Parallélisme

Le parallélisme ne nécessite pas deux tâches pour exister. Il exécute littéralement physiquement des parties de tâches OU plusieurs tâches, en même temps en utilisant une infrastructure multicœur de CPU, en attribuant un cœur à chaque tâche ou sous-tâche.

Le parallélisme nécessite essentiellement du matériel avec plusieurs unités de traitement. Dans un processeur monocœur, vous pouvez obtenir la concurrence mais PAS le parallélisme.

Méthodes asynchrones

Ceci n'est pas lié à la concurrence et au parallélisme, l'asynchronie est utilisée 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 travailler loin de l'application actuelle et nous ne voulons pas attendez et bloquez notre application en attendant la réponse.

Vipin Jain
la source
2
Très utile. Merci
Neha
Je suis toujours confus entre Async et la concurrence. J'ai vu les expressions «exécuter des tâches de manière asynchrone» et «exécuter des tâches simultanément» utilisées. L'exécution de tâches asynchrones et l'exécution simultanée de tâches semblent signifier la même chose?
Moondra
1
La tâche @Moondra Async s'exécute sur un seul thread, rien lié au multithreading. La tâche asynchrone envoie une tâche à un processus externe en dehors de votre application ... c'est-à-dire base de données, lecteur de fichiers ... ce sont des processus IO puis un rappel est ajouté sur le processus pour effectuer une action lorsque le processus IO est terminé. ce dont je ne suis pas sûr, c'est qu'il existe des fonctionnalités "asynchrones" dans certains langages de programmation qui créent un nouveau thread séparé lorsque vous appelez une tâche asynchrone, j'ai entendu dire que C # en est un, mais je n'en suis pas sûr
Tobi Owolawi
56

La concurrence se produit lorsque 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.

Le parallélisme se produit lorsque ces tâches sont réellement exécutées en parallèle.

entrez la description de l'image ici


L'asynchronie est un concept distinct (même s'il est lié dans certains contextes). Cela fait référence au fait qu'un événement peut se produire à un moment différent (pas en synchronisme) avec un autre événement. Les schémas 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.

entrez la description de l'image ici

entrez la description de l'image ici

Dimos
la source
6
Illustration simple et efficace.
contactmatt
1
la concurrence est-elle identique à l'asynchronie?
nos
1
Ces 2 concepts sont très proches, certes, mais pas les mêmes. En pratique, l'asynchronie est plus liée à l'interaction entre les actions (disons A et B), où l'une (B) est déclenchée par l'autre (A) et si la seconde attendra la première pour terminer. La concurrence est un terme plus général pour les actions qui peuvent également être indépendantes les unes des autres et si elles sont exécutées en séquence ou si leurs exécutions sont entrelacées.
Dimos
1
Donc, l'asynchronie est principalement une question de blocage et de non-blocage
Daniel
15

Tout le monde a du mal à associer asynchrone au parallélisme ou à la concurrence car asynchrone n'est pas un antonyme de 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.

Aloysius Snuffleupagus
la source
13

Il existe plusieurs scénarios dans lesquels la concurrence peut se produire:

Asynchronie - 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 que la réponse soit reçue. C'est un peu comme lorsque vous envoyez un email et que vous continuez votre vie sans attendre de réponse.

Parallélisme - Cela signifie que votre programme exploite le matériel des machines multicœurs pour exécuter des tâches en même temps en divisant le travail en tâches, chacune étant exécutée sur un noyau distinct. C'est un peu comme chanter sous la douche: en fait, vous faites exactement deux choses en même temps.

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 diverses fenêtres de messagerie instantanée; bien que vous changiez en fait, le résultat net est que vous avez plusieurs conversations en même temps.

rahulaga_dev
la source
Ce sont de très bonnes analogies! Merci. Serait-il juste de dire que la concurrence peut être définie avec votre définition multithreading? Donc, concurrence = multithreading sur un seul cœur, ce qui semble se produire en même temps mais qui bascule vraiment très rapidement?
wongz
3

Concurrence

La concurrence signifie qu'une application progresse sur plus d'une tâche à la fois (simultanément). Eh bien, si l'ordinateur n'a qu'un seul processeur, l'application peut ne pas progresser sur plus d'une tâche exactement en même temps, mais plus d'une tâche est 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 qui peuvent être traitées en parallèle, par exemple sur plusieurs processeurs en même temps.

Concurrence et parallélisme en détail

Comme vous pouvez le voir, la concurrence 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 (séquentiellement) ou travailler sur plusieurs tâches en même temps (simultanément).

Le parallélisme, quant à lui, est lié à la manière 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 exécutées en parallèle.

Comme vous pouvez le voir, une application peut être simultanée, mais pas parallèle. Cela signifie qu'il traite plus d'une tâche en même temps, mais les tâches ne sont pas décomposées en sous-tâches.

Une application peut également être parallèle mais pas simultanée. 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 application ne peut être ni simultanée ni parallèle. Cela signifie qu'il ne fonctionne que sur une seule tâche à la fois et que la tâche n'est jamais divisée en sous-tâches pour une exécution parallèle.

Enfin, une application peut également être à la fois simultanée et parallèle, en ce sens qu'elle fonctionne à la fois sur plusieurs tâches en même temps et divise également chaque tâche en sous-tâches pour une exécution parallèle. Cependant, certains des avantages de la concurrence et du parallélisme peuvent être perdus dans ce scénario, car les processeurs de l'ordinateur sont déjà raisonnablement occupés par la concurrence ou le parallélisme uniquement. Leur combinaison peut conduire à un petit gain de performance ou même à 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

LONGHORN007
la source
3

Parallèle:C'est un terme large qui signifie que deux morceaux de code exécutent cela "en même temps". Peu importe s'il s'agit d'un "vrai" parallélisme ou s'il est truqué par un modèle de conception intelligent. Le fait est que vous pouvez démarrer les «tâches» en même temps et les contrôler ensuite séparément (avec mutex et toutes les astuces appropriées). Mais généralement, vous préférez utiliser le mot «parallèle» uniquement pour le «vrai» parallélisme, comme dans: vous le faites par le biais d'un multitâche non coopératif (qu'il s'agisse de traiter les cœurs CPU / GPU, ou uniquement au niveau logiciel en laissant le système d'exploitation le gérer à un niveau très bas). Les gens hésitent à dire «parallèle» juste pour du code séquentiel compliqué qui simule le parallélisme, comme vous le trouverez dans le javascript d'une fenêtre de navigateur par exemple. D'où la raison pour laquelle les gens de ce fil disent que "asynchrone n'a rien à voir avec le parallélisme". Eh bien c'est le cas, mais ne les confondez pas.

Concurrent: il ne peut pas y avoir de concurrence sans parallélisme (qu'il soit 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 essaieront 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'est pas lié au parallélisme, mais cela ouvre la voie (il vous incombe de rendre les choses parallèles ou non - continuez à lire).

«Asynchrone» fait référence à une représentation du parallélisme qui formalise les trois éléments de base généralement impliqués dans le parallélisme: 1) définir l'initialisation de la tâche (par exemple, quand elle démarre et quels paramètres elle obtient), 2) ce qui doit être fait après la fin et 3) Ce que le code doit continuer à faire entre les deux.

Mais ce n'est toujours que de la syntaxe (généralement représentée comme des méthodes de rappel). En coulisse, 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 est en cours d'exécution. Et puis il les dépile un par un et les exécute séquentiellement. 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;)

jeancallisti
la source
2

Il y a un peu de sémantique à clarifier ici:

La concurrence ou le parallélisme est une question de conflit de ressources , tandis que Asynchrone concerne le flux de contrôle .

Différentes procédures (ou leurs opérations constituantes ) sont dites asynchrones, lorsqu'il n'y a pas d'implémentation déterministe de l'ordre de leur traitement ; en d'autres termes, il y a une probabilité que l'un d'entre eux puisse être traité à un moment donné T. Par définition, plusieurs processeurs (par ex. CPU ou Personnes) permettent de traiter plusieurs d'entre eux 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 concurrence est la possibilité définitive de conflit à un moment donné T. Le parallélisme est garanti de manière triviale lorsqu'aucune ressource n'est partagée (par exemple, processeur et stockage différents); sinon, le contrôle de la concurrence doit être abordé.

Par conséquent, une procédure ou opération asynchrone peut être traitée en parallèle ou simultanément avec d'autres.

Evans AB
la source
2

La concurrence consiste à exécuter plusieurs tâches en même temps, mais pas nécessairement simultanément. Lorsque vous devez effectuer plus d'une tâche mais que vous avez une seule ressource, nous optons pour la concurrence. Dans un environnement à cœur unique, la concurrence est obtenue par la commutation de contexte.

Le parallélisme, c'est comme effectuer plus d'une tâche simultanément, comme vous pouvez chanter et vous baigner ensemble. Maintenant, vous effectuez une tâche en parallèle.

Asynchrone est quelque chose qui est lié à l'exécution de thread dans un modèle asynchrone lorsqu'une tâche est exécutée, vous pouvez passer à une tâche différente sans attendre que la précédente soit terminée.

La programmation asynchrone nous aide à atteindre la concurrence. La programmation asynchrone dans un environnement multi-thread est un moyen de réaliser le parallélisme.

Dhirendra Gautam
la source
2

"Sync et async sont des modèles de programmation. Concurrent et parallèle sont des façons dont les tâches sont exécutées ...". Source: https://medium.com/better-programming/sync-vs-async-vs-concurrent-vs-parallel-5754cdb60f66

En d'autres termes, sync et async décrivent comment votre programme s'exécute lors d'un appel de fonction (va-t-il attendre ou continuera-t-il à s'exécuter?), Tandis que simultané et parallèle décrivent comment une fonction (une tâche) sera exécutée (simultanée = éventuellement exécutée à en même temps, parallèle = effectivement exécuté en même temps).

Pedro Boechat
la source
le médium n'est pas une source, c'est un article de quelqu'un d'autre qui parle de sa (mauvaise) compréhension d'un sujet, cela ne fait pas de lui une autorité.
Moha le chameau tout-puissant le
1
C'est une citation, donc la source. La plupart des réponses ici ne sont écrites par les autorités dans aucun domaine et l'explication donnée par l'auteur est assez bonne.
Pedro Boechat le
Chez stackoverflow, vous avez au moins un système de vote, et c'est une communauté de professionnels. N'importe qui peut écrire n'importe quoi sur support. Ce n'est pas une comparaison juste entre les deux.
Moha le chameau tout-puissant le
1
Tout le monde peut écrire n'importe quoi ici aussi, je ne sais pas pourquoi vous choisissez Medium. Quoi qu'il en soit, je suis un programmeur professionnel et j'approuve cette compréhension. Et je le trouve élégant car il est relativement court.
Pedro Boechat
Le problème n'est pas que Medium est une mauvaise source, le problème est qu'une réponse qui renvoie simplement à une page externe n'est pas une réponse. Vous pourriez grandement améliorer cette réponse si vous développiez la partie citée ou résumiez le contenu de l'article plutôt que de simplement créer un lien vers celui-ci.
David Schwartz le
1

CONCURRENCE VS PARALLELISM: la concurrence à un moment donné, une seule tâche peut être effectuée. exemple: parallélisme de processeur CPU unique à un moment donné, nous pouvons effectuer plusieurs tâches. exemple: processeur dual core ou multi core

rva
la source
1

Ici, j'explique avec quelques exemples


Parallélisme

Un GPU utilise un traitement parallèle pour traiter le même bloc de code ( noyau AKA ) sur des milliers de threads physiques et logiques. Idéalement, le processus démarre et se termine pour tous les threads en même temps. Un seul cœur de processeur sans hyperthreading ne peut pas effectuer de traitement parallèle.

Remarque: je l'ai dit idéalement, car lorsque vous exécutez un noyau avec une taille de 7M appels sur un matériel avec 6M de threads, il doit exécuter deux fois le même code sur tous les 6M threads en parallèle tout en consommant tous les 6M threads à chaque fois.

  • un noyau (un morceau de code) est exécuté sur plusieurs processeurs
  • simultanément
  • avec une seule séquence d'exécution (un noyau doit faire la même chose dans tous les threads, donc les "branchements" ou "if" sont évités car ils consommeront considérablement les ressources en créant beaucoup de NOP (no-operations) pour synchroniser tous les threads)
  • essentiellement augmente la vitesse considérablement
  • limite drastiquement ce que vous pouvez faire
  • dépend fortement du matériel

Remarque: le parallélisme n'est pas limité au GPU.


Concurrence

Un service web reçoit de nombreuses petites demandes en temps réel et il doit traiter chacune de ces demandes différemment, à tout moment, et indépendamment des autres demandes ou des travaux internes. Pourtant, vous voulez que le service Web soit opérationnel à tout moment sans altérer l'état des données ou la santé du système.

Imaginez simplement un utilisateur mettant à jour un enregistrement et un autre utilisateur supprimant le même enregistrement en même temps.

  • de nombreuses tâches sont exécutées
  • en temps réel (ou à chaque demande)
  • avec différentes séquences d'exécution (contrairement au noyau en traitement parallèle, les tâches simultanées peuvent faire différentes choses, vous devrez probablement les mettre en file d'attente ou les hiérarchiser)
  • améliore essentiellement le temps de réponse moyen car la tâche n ° 2 n'a pas à attendre la fin de la tâche n ° 1
  • sacrifie essentiellement le temps de calcul car de nombreuses tâches s'exécutent en même temps et les ressources sont limitées
  • doit gérer correctement les ressources partagées afin de ne pas se bloquer ou de corrompre les données.

Remarque : ces demandes consomment généralement des ressources essentielles telles que la mémoire, la connexion à la base de données ou la bande passante. Pourtant, vous voulez que le service Web soit réactif à tout moment. L'asynchrone est la clé pour la rendre réactive , pas la concurrence


Asynchrone

Un processus lourd (comme une opération d'E / S) peut facilement bloquer l'interface graphique s'il est exécuté sur le thread GUI. Afin de garantir la réactivité de l'interface utilisateur , un processus lourd peut être exécuté de manière asynchrone. Il est préférable d'exécuter des opérations asynchrones similaires une à la fois . Par exemple, plusieurs opérations liées aux E / S peuvent être beaucoup plus lentes si elles sont exécutées en même temps, il est donc préférable de les mettre en file d' attente pour qu'elles commencent

  • une tâche ou un lot de tâches est exécuté sur un autre thread
  • une fois
  • s'il y a une tâche, alors il n'y a pas de séquence donc vous attendez qu'elle se termine ou vous tirez et oubliez
  • s'il s'agit d'un lot de tâches, soit vous déclenchez et oubliez tout en même temps, attendez que tout se termine, ou exécutez chaque tâche pour commencer
  • réduit essentiellement les performances en raison des frais généraux
  • fournit une réactivité à un autre thread (efficace contre le blocage du thread d'interface utilisateur ou d'autres threads essentiels)

Remarque: une opération asynchrone qui est exécutée simultanément (c'est-à-dire plus d'une fois à la fois) est une opération simultanée.


Remarque: la concurrence et l'asynchrone sont souvent confondues. La concurrence fait référence à différentes parties du système travaillant ensemble sans interférer les unes avec les autres (ces problèmes sont souvent résolus avec des verrous, des sémaphores ou des mutex). L'asynchrone est la façon dont vous atteignez la réactivité (comme le threading).

* Remarque: l' asynchrone et le multithreading sont souvent confondus. Le code asynchrone n'implique pas nécessairement un nouveau thread. cela peut être une opération matérielle ou comme Stephan l' appelle une opération pure, lisez ceci

par exemple, dans le code WPF + C # ci-dessous, await Task.Run(()=> HeavyMethod(txt))résout un problème d'asynchrone, tout en textBox.Dispatcher.Invokerésolvant un problème de concurrence:

private async void ButtonClick(object sender, RoutedEventArgs e)
{
    // run a method in another thread
    await Task.Run(()=> HeavyMethod(txt));

    // modify UI object in UI thread
    txt.Text = "done";
}

// This is a thread-safe method. You can run it in any thread
internal void HeavyMethod(TextBox textBox)
{
    while (stillWorking)
    {
        // use Dispatcher to safely invoke UI operations
        textBox.Dispatcher.Invoke(() =>
        {
            // UI operations outside of invoke will cause ThreadException
            textBox.Text += ".";
        });
    }
}
Bizhan
la source
0

Je vais faire court et intéressant pour comprendre ces concepts.

Concurrent vs Parallel - Façon dont les tâches sont exécutées.

Prenons un exemple dans la vraie vie: il y a un défi qui vous oblige à la fois à manger un énorme gâteau et à chanter une chanson entière. Vous gagnerez si vous êtes le plus rapide qui chante toute la chanson et termine le gâteau. La règle est donc que vous chantez et mangez simultanément . Comment vous faites cela ne fait pas partie de la règle. Vous pouvez manger tout le gâteau, puis chanter la chanson entière, ou vous pouvez manger un demi-gâteau, puis chanter une demi-chanson, puis recommencer, etc.

Le parallélisme est un type spécifique de concurrence où les tâches sont réellement exécutées simultanément. En informatique, le parallélisme ne peut être réalisé que dans des environnements multicœurs.

Synchrone vs Asynchrone - Modèles de programmation.

En synchronisation, vous écrivez le code sous forme d'étapes exécutées dans l'ordre, de haut en bas. Dans un modèle de programmation asynchrone, vous écrivez du code sous forme de tâches, qui sont ensuite exécutées simultanément. L'exécution simultanée signifie que toutes les tâches sont probablement exécutées en même temps.

Srikanth Bandaru
la source