Maison > Article > développement back-end > Comment utiliser correctement la technologie de programmation asynchrone dans ASP.NET MVC
La synchronisation (anglais : Synchronisation) fait référence à la coordination des événements qui se produisent dans un système pour obtenir une cohérence et une unification dans le temps. Pour parler franchement, plusieurs tâches sont exécutées une par une et une seule tâche est exécutée en même temps.
Asynchrone (anglais : asynchronisation) fait référence au fait de laisser le processeur mettre temporairement de côté la réponse à la requête en cours, traiter la requête suivante et commencer à s'exécuter après avoir reçu une notification de rappel via une interrogation ou d'autres méthodes. Les multithreads placent les opérations asynchrones dans un autre thread pour les exécuter et reçoivent des notifications d'achèvement via des méthodes d'interrogation ou de rappel. Cependant, sur le port d'achèvement, le système d'exploitation prend en charge la planification des opérations asynchrones et déclenche la méthode de rappel lorsqu'elle est terminée. interruptions matérielles. Cette méthode ne nécessite pas de threads supplémentaires.
2.1. Pourquoi devons-nous utiliser l'asynchrone dans ASP.NET MVC ?
IIS dispose d'un pool de threads pour gérer les demandes des utilisateurs. Lorsqu'une nouvelle demande arrive, les threads du pool seront planifiés pour gérer la demande. Cependant, le niveau de concurrence est très élevé. Lorsque les threads du pool ne sont plus en mesure de satisfaire autant de requêtes et que chaque thread du pool est occupé, le thread traitant la requête sera bloqué lors du traitement de la requête et le thread ne pourra pas répondre à une autre requête . la file d'attente des requêtes est pleine, le serveur Web rejette la requête et est dans l'état HTTP 503 occupé. Si vous faites face à une latence élevée, telle que des opérations réseau, la plupart de ces threads attendent simplement dans l'état et ne font rien la plupart du temps. Ces threads peuvent être mieux utilisés en utilisant la programmation asynchrone.
Description du scénario 1 : si une requête génère un appel réseau qui prend deux secondes, que la requête soit exécutée de manière synchrone ou les deux exécutions asynchrones prends deux secondes. Cependant, lors d'un appel asynchrone, le serveur ne bloque pas la réponse aux autres requêtes en attendant la fin de la première requête. Par conséquent, les requêtes asynchrones empêchent la mise en file d’attente des requêtes lorsque de nombreuses requêtes appellent des opérations de longue durée.
Description du scénario 2 : Supposons que j'ai trois opérations, qui prennent respectivement 500, 600 et 700 millisecondes. Avec les appels synchrones, le temps de réponse total sera légèrement supérieur à 1 800 millisecondes. Cependant, s'il s'agit d'un appel asynchrone (simultané), le temps de réponse total sera légèrement supérieur à 700 millisecondes, car c'est la durée de la tâche/opération la plus longue. Par conséquent : Les méthodes d’action asynchrone sont utiles lorsqu’une action doit effectuer plusieurs opérations indépendantes de longue durée.
3.1. Utilisez le pipeline synchrone lorsque les conditions suivantes sont remplies :
1), l'opération est très simple ou le temps d'exécution est très court.
2) La simplicité est plus importante que l'efficacité.
3) Cette opération est principalement une opération CPU plutôt qu'une opération impliquant une grande quantité de surcharge disque ou réseau. L'utilisation de méthodes d'opération asynchrones pour les opérations liées au processeur n'apporte aucun avantage et entraîne également une surcharge supplémentaire.
3.2 Utiliser des pipelines asynchrones lorsque les conditions suivantes sont remplies :
1) , Les opérations sont liées au réseau ou aux E/S plutôt qu'au processeur.
2), Les tests montrent que les opérations de blocage constituent un goulot d'étranglement pour les performances du site Web, et en utilisant des méthodes d'opération asynchrones pour ces appels de blocage, IIS peut répondre à davantage de requêtes.
Le parallélisme est plus important que la simplicité du code.
3) Vous souhaitez fournir un mécanisme permettant aux utilisateurs d'annuler les requêtes de longue durée.
4.1. Puisque l'asynchrone peut grandement améliorer la réactivité des applications ? Alors, quel sera l'effet si ASP.NET MVC utilise tous des contrôleurs asynchrones (Async Controller) ? Deviendra-t-il un site Web à haut débit et à haute concurrence ?
Le simple ajout d'async au code n'apportera en réalité aucune amélioration des performances. Il doit être exécuté de manière asynchrone là où l'asynchrone est requis (IO) uniquement dans. de cette façon, le débit peut être véritablement amélioré. Les contrôleurs asynchrones sont principalement utilisés pour les opérations gourmandes en E/S, telles que la lecture et l'écriture de données, et les opérations sont relativement indépendantes ; les opérations gourmandes en CPU ne conviennent pas aux opérations asynchrones - que vous traitiez de manière asynchrone ou synchrone, le CPU finira par être rempli. Ainsi, les opérations asynchrones peuvent effectivement avoir pour effet d'augmenter le nombre de concurrences, mais cela dépend de l'endroit où vous les utilisez. L’utilisation de tous les contrôleurs asynchrones n’améliorera pas définitivement les performances du site.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!