Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Apprendre Programmation Asynchrone vs Threading | Threading
C# Avancé Avec .NET
course content

Contenu du cours

C# Avancé Avec .NET

C# Avancé Avec .NET

1. Introduction au Développement de Bureau avec .NET
2. GUI Interactif
3. Threading
4. Génériques et Réflexion

book
Programmation Asynchrone vs Threading

Dans le dernier chapitre, nous avons utilisé le Threading pour exécuter une méthode de manière concurrente dans notre application. Nous pouvons faire de même en utilisant la Programmation Asynchrone également :

Dans la vidéo, vous avez vu que nous n'avons pas explicitement exécuté l'instruction timerLabel.Text = … dans le thread principal. Cela sera expliqué un peu plus tard.

Vous vous demandez peut-être quelle est la différence entre la programmation asynchrone et le multi-threading ? Eh bien, c'est fondamentalement la façon dont les deux fonctionnalités fonctionnent différemment.

Si vous vous souvenez des cours précédents, nous avons discuté de la programmation asynchrone et nous avons également appris à l'utiliser dans nos applications, cependant, nous n'avons pas exploré en profondeur comment elle fonctionnait exactement à un niveau inférieur.

Dans le multi-threading, nous créons manuellement de nouveaux threads pour exécuter des méthodes sur ceux-ci afin d'exécuter ces méthodes de manière concurrente ou parallèle au thread principal, et les threads dans leur ensemble sont dédiés à l'exécution de ces méthodes. Il est également de notre responsabilité de libérer correctement (supprimer) les threads et de nous assurer qu'il n'y a pas de conflit entre les threads - ce que nous apprendrons plus en détail dans le prochain chapitre.

Dans la programmation asynchrone, nous pouvons également exécuter les méthodes de manière concurrente, cependant, dans ce cas, nous ne gérons pas les threads manuellement. Alors, que se passe-t-il en arrière-plan ? Le framework .NET est responsable de l'attribution et de la désattribution des threads à différentes tâches lorsqu'elles sont exécutées asynchrone. Il est important de noter que la programmation asynchrone ne crée pas de nouveaux threads, mais attribue plutôt des threads libres à différentes tâches à partir du Thread Pool.

Le Thread Pool est une collection de threads préalloués qui sont gérés par .NET. Ces threads sont prêts et en attente pour exécuter des tâches. Le thread pool est créé automatiquement par .NET lorsque votre application démarre.

Ainsi, lorsque le programme rencontre une tâche asynchrone, elle est assignée à un thread disponible du Thread Pool. Il est également possible que dans certains cas, la tâche soit exécutée sur plusieurs threads différents. Par exemple, les opérations d'E/S (entrée - sortie), comme la lecture ou l'écriture dans un fichier, sont effectuées à un niveau très bas, plus proche du CPU, où le concept de threads n'existe pas. Ainsi, les opérations ne sont liées à aucun thread spécifique et ne bloquent donc aucun thread spécifique pendant leur exécution.

Il n'y aura pas nécessairement de correspondance un-à-un entre les tâches et les threads ; cela dépend généralement du type d'opération effectuée. C'est entièrement géré par .NET lui-même, et nous n'avons généralement pas à nous soucier des détails en arrière-plan. Tout comme dans la vidéo, nous n'avons pas explicitement exécuté l'instruction d'affectation de propriété timerLabel.Text = … dans le thread principal. .NET décide et assigne automatiquement les threads pertinents aux parties pertinentes des méthodes.

Vous pouvez voir une brève démonstration dans la vidéo suivante :

Maintenant que nous avons une idée de son fonctionnement en arrière-plan, il est bon de se demander, quelle est la différence pratique entre eux ? Et quand devrions-nous utiliser le threading ou la programmation asynchrone ?

La programmation asynchrone repose sur la création et l'exécution de tâches. Tandis que le threading repose sur la création et la gestion de threads.

Bien que des résultats similaires puissent être obtenus en utilisant l'une ou l'autre méthode, ces deux méthodes sont destinées à des choses très différentes.

La programmation asynchrone est particulièrement utile pour les tâches liées à l'I/O qui doivent être effectuées simultanément sans bloquer le programme principal. Par exemple, lors de la récupération de données à partir d'un fichier, d'une API ou d'une base de données, le thread principal peut être bloqué, mais nous pouvons utiliser des méthodes asynchrones pour attendre l'achèvement de ces tâches simultanément, et récupérer les résultats des tâches lorsque celles-ci sont finalement terminées.

Le threading, en revanche, est plus adapté aux opérations plus longues et plus coûteuses qui sont liées au CPU. Par exemple, des calculs complexes et longs, le traitement d'images ou de vidéos, ou simplement quelque chose comme la lecture d'une vidéo ou d'un audio tout en gardant le programme réactif. Nous pouvons également attribuer plusieurs opérations intensives en ressources à plusieurs threads différents, maximisant ainsi les performances.

1. Vrai ou Faux : La programmation asynchrone crée toujours de nouveaux threads pour chaque tâche.

2. Quelle approche est généralement plus adaptée pour améliorer la réactivité dans les applications avec des tâches liées à l'I/O ?

3. Laquelle des tâches suivantes est plus adaptée à la programmation asynchrone ?

4. Quelle est la différence entre la programmation asynchrone et le multi-threading ?

Vrai ou Faux : La programmation asynchrone crée toujours de nouveaux threads pour chaque tâche.

Vrai ou Faux : La programmation asynchrone crée toujours de nouveaux threads pour chaque tâche.

Sélectionnez la réponse correcte

Quelle approche est généralement plus adaptée pour améliorer la réactivité dans les applications avec des tâches liées à l'I/O ?

Quelle approche est généralement plus adaptée pour améliorer la réactivité dans les applications avec des tâches liées à l'I/O ?

Sélectionnez la réponse correcte

Laquelle des tâches suivantes est plus adaptée à la programmation asynchrone ?

Laquelle des tâches suivantes est plus adaptée à la programmation asynchrone ?

Sélectionnez la réponse correcte

Quelle est la différence entre la programmation asynchrone et le multi-threading ?

Quelle est la différence entre la programmation asynchrone et le multi-threading ?

Sélectionnez la réponse correcte

Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 3. Chapitre 4
We're sorry to hear that something went wrong. What happened?
some-alt