Différence de performances entre Synchrone HTTP Gestionnaire et Gestionnaire HTTP Asynchrone
Est-il une différence de performance entre Synchrone Gestionnaire HTTP et HTTP Asynchrone Gestionnaire?
IHttpHandler vs IHttpAsyncHandler
Pourquoi choisir l'un plutôt qu'un autre?
Quels sont les avantages?
Vous devez vous connecter pour publier un commentaire.
ASP.NET utilise le pool de threads pour traiter les requêtes HTTP entrantes.
Lorsqu'un IHttpHandler est appelé, un thread du pool est utilisé pour exécuter la demande et le même thread est utilisé pour traiter l'ensemble de la demande. Si cette demande n'appelle à une base de données ou un autre service web ou toute autre chose qui peut prendre du temps, le pool de threads thread attend. Cela signifie que le pool de threads passer du temps d'attente sur les choses alors qu'elles pourraient être utilisées à d'autres requêtes.
En revanche, lorsqu'un IHttpAsyncHandler, il existe un mécanisme pour permettre à la demande d'enregistrement d'un rappel et retour le thread du pool de la piscine avant que la demande est traitée entièrement. Le thread du pool commence à faire le traitement de la demande. Probablement les appels de certains méthode asynchrone sur une base de données d'appel ou d'un service web ou quelque chose et puis il enregistre un rappel pour ASP.NET pour appeler lorsque cet appel retourne. À ce moment, le thread du pool qui a été le traitement de la requête HTTP est retourné à la piscine pour traiter une autre requête HTTP. Lorsque la base de données d'appel ou quoi que revient, ASP.NET déclenche le rappel enregistré sur un nouveau thread du pool. Le résultat final est que vous n'avez pas le pool de threads en attente sur les I/O bound opérations et vous pouvez utiliser votre pool de threads de manière plus efficace.
De très haute simultanéité des applications (des centaines ou des milliers de véritablement utilisateurs simultanés), IHttpAsyncHandler peut fournir un énorme coup de pouce dans la simultanéité. Avec un plus petit nombre d'utilisateurs, il peut encore être un avantage si vous avez de très longues demandes en cours d'exécution (comme une Longue requête d'Interrogation). Cependant, la programmation dans le IHttpAsyncHandler est plus compliqué, et donc ne devrait pas être utilisé quand il n'est pas vraiment nécessaire.
Il n'y a pas de différence de performances en plus de gérer un autre thread.
Synchrone est plus facile à coder. Vous envoyez la demande et le fil se bloque jusqu'à la réponse est renvoyée. Ensuite, vous pouvez gérer la réponse et les erreurs de la même méthode. Il est facile à lire et à déboguer. Si vous exécutez ce code dans votre thread GUI, Windows peut signaler que votre programme est en "ne répond pas" si vous ne recevez pas une réponse rapidement.
Utilisation Asynchrone si vous ne voulez pas que votre fil de geler. L'utilisateur peut continuer à interagir avec le programme en tâche de fond attend la réponse HTTP. Ensuite, vous devez écrire du code pour gérer les tâches d'arrière-plan, la montre lorsqu'elle est complète, gérer les erreurs, passer ces erreurs de retour vers le thread GUI, etc. C'est un peu plus de travail, et beaucoup plus difficile à lire et à déboguer, mais en fin de compte un produit de meilleure qualité si c'est fait correctement.
Edit: Corrigé que les méthodes synchrones geler le fil, pas nécessairement l'ensemble du programme.