estoy utilizando LINQ paralelo, y yo estoy tratando de descargar muchas direcciones URL al mismo tiempo utilizando essentily código como este:Parallel LINQ - uso más hilos que los procesadores (CPU para tareas no encuadernadas)
int threads = 10;
Dictionary<string, string> results = urls.AsParallel(threads).ToDictionary(url => url, url => GetPage(url);
Desde descargar páginas web está vinculado a la red en lugar de a la CPU, usar más hilos que mi número de procesadores/núcleos es muy beneficioso, ya que la mayor parte del tiempo en cada hilo se gasta esperando a que la red se ponga al día. Sin embargo, a juzgar por el hecho de que ejecutar lo anterior con subprocesos = 2 tiene el mismo rendimiento que los subprocesos = 10 en mi máquina de doble núcleo, estoy pensando que las pisadas enviadas a AsParallel están limitadas a la cantidad de núcleos.
¿Hay alguna manera de anular este comportamiento? ¿Hay una biblioteca similar disponible que no tenga esta limitación?
(he encontrado tal biblioteca para Python, pero necesita algo que funciona en .Net)
estoy recibiendo el mismo síntoma. Ejecuté su análisis y obtuve solo 1 hilo ... supongo que el rendimiento aumentó de 1 a 2 hilos que vi en mi cabeza –
@DrFredEdison: ¿Qué ocurre si utiliza el formulario Select/ToDictionary como en la muestra? –
Veo más o menos el mismo resultado que tú. Tengo aproximadamente 5 hilos usados para cada ejecución de prueba ahora .. Gracias por llevarme hasta aquí ... Creo que conseguirá trabajo para lo que necesito en este momento. –