Este artículo es un artículo espejo de traducción automática, por favor haga clic aquí para saltar al artículo original.

Vista: 16497|Respuesta: 5

[Fuente] .NET/C# concurrencia multihilo usando el pozo de HttpWebRequest

[Copiar enlace]
Publicado el 20-12-2021 15:21:04 | | | |
Al hacer planificación de tareas, la tarea de planificar consiste en simular la iniciación de una solicitud HTTP y descubrir que cuando hay más tareas, la planificación parece ser como una muerte falsa.

El número máximo por defecto de conexiones solicitadas en un sistema Windows normal es 2, y en un sistema operativo servidor por defecto es 10. Si no modificas este límite de conexión concurrente,Entonces, el número de conexiones http que el cliente puede hacer al mismo tiempo es solo 2 o 10

System.Net.ServicePointManager.DefaultConnectionLimit Este es el número máximo de conexiones que pueden obtener la configuración predeterminada actual, como se muestra en la figura siguiente:



¿Existe un límite predeterminado de concurrencia para HttpClient?

Antes de .Net 4.0, las operaciones HttpWebRequest se basaban en las operaciones. Por defecto, tiene un máximo muy conservador de 2 límites de concurrencia para el mismo sitio, lo que a menudo hace que las HttpWebRequests no alcancen la velocidad ideal por defecto (supongo que esta estrategia frustra a muchos programadores), y el valor de App.config o ServicePointManager.DefaultConnectionLimit debe modificarse.

MS introdujo una clase HttpClient en .Net 4.5 para gestionar operaciones Http, y pensé que HttpClient y HttpWebRequest seguían la misma política. Hoy, al escribir un programa de descarga multihilo, usé 10 conexiones concurrentes y descubrí que HttpClient no tiene un límite de número concurrente por defecto.

Al principio pensé que sí. Net 4.5 eliminó este límite de concurrencia (al fin y al cabo, básicamente nadie sigue este estándar ahora), y luego reescribió el código relevante con WebRequest, y descubrió que seguía siendo el límite de concurrencia de 2, y que el valor de ServicePointManager.DefaultConnectionLimit también era 2. Es decir, HttpClient no está controlado por la política de concurrencia HttpWebRequest, y no existe un límite de concurrencia a nivel de sistema.

Además, durante las pruebas, descubrí que HttpWebRequest no se limita a un máximo de 2 concurrencias para todas las direcciones. Por ejemploNo existe un límite de concurrencia para las conexiones de direcciones HTTP locales (http://localhost/*).

Llamadas de entorno multihilo C# al límite de conexión concurrente de HttpWebRequest

El HttpWebRequest o WebClient de .net tiene un límite de conexión concurrente en el caso del multihilo, que es 2 por defecto en sistemas operativos de escritorio como Windows XP y Windows 7, y 10 por defecto en sistemas operativos de servidor. Si no cambias este límite de conexión concurrente, el número de conexiones HTTP que un cliente puede hacer a la vez es solo 2 o 10. Para algunas aplicaciones, como navegadores o arañas, el número de concurrencia de 2 o 10 es demasiado pequeño y afecta enormemente al rendimiento de la aplicación. Este límite de conexión concurrente se debe a los estándares HTTP 1.0 y HTTP 1.1, que especifican un máximo de 2 conexiones concurrentes. Sin embargo, los navegadores convencionales ya no siguen esta regla, pero el framework .NET sigue siguiéndola por defecto.

Muchos artículos dicen que acceder a HttpWebRequest de forma asincrónica puede mejorar el rendimiento concurrente, pero he comprobado que si no cambias el número predeterminado de conexiones concurrentes, el rendimiento de acceso síncrono o asíncrono no es bueno.

También podemos establecer el número máximo de conexiones concurrentes en app.config de la siguiente manera:

Artículo de referencia

El inicio de sesión del hipervínculo es visible.
El inicio de sesión del hipervínculo es visible.





Anterior:Xshell Xftp Para seguir usando este programa, debes aplicar lo último...
Próximo:El comando Maven impulsa paquetes jar de terceros a repositorios privados de Nexus
Publicado el 26-12-2021 17:20:57 |
Aprende a aprender。。。。。
Publicado el 10-1-2022 08:42:47 |
Aprende a aprender。。。。。
Publicado el 8-03-2022 a las 15:58:54 |
Aprender...
 Propietario| Publicado el 18-2-2023 21:47:09 |
Además, la solución

 Propietario| Publicado el 2023-3-10 21:21:15 |
Configura a través de web.config

Renuncia:
Todo el software, materiales de programación o artículos publicados por Code Farmer Network son únicamente para fines de aprendizaje e investigación; El contenido anterior no se utilizará con fines comerciales o ilegales; de lo contrario, los usuarios asumirán todas las consecuencias. La información de este sitio proviene de Internet, y las disputas de derechos de autor no tienen nada que ver con este sitio. Debes eliminar completamente el contenido anterior de tu ordenador en un plazo de 24 horas desde la descarga. Si te gusta el programa, por favor apoya el software genuino, compra el registro y obtén mejores servicios genuinos. Si hay alguna infracción, por favor contáctanos por correo electrónico.

Mail To:help@itsvse.com