programming parallel net library for examples ejemplo c# .net concurrency task-parallel-library performance

net - task parallel library c#



Bucles paralelos paralelos.para cada (2)

La respuesta será, depende;

  1. ¿Qué estás haciendo con la dirección IP una vez que la tienes?
  2. ¿Cuánto tiempo dura cada paso?

Los hilos no son baratos, toman tiempo para crear y la memoria existe. Si no hace algo computacionalmente costoso con esas direcciones IP, y utiliza el tipo incorrecto de recopilación para el acceso simultáneo, es casi seguro que ralentiza la aplicación.

Usa StopWatch para ayudarte a responder estas preguntas.

Tengo algún código que actualmente estoy optimizando para la concurrencia en arquitecturas multinúcleo. En una de mis clases, encontré un bucle foreach anidado. Básicamente, el bucle externo itera a través de una matriz de objetos NetworkInterface . El bucle interno recorre las direcciones IP de las interfaces de red.

Me puse a pensar, ¿es necesario tener bucles anidados Parallel.ForEach necesariamente una buena idea? Después de leer este artículo (¿ Anidados paralelos.Para cada bucle en la misma lista? ) Todavía no estoy seguro de qué se aplica en términos de eficiencia y diseño paralelo. Este ejemplo trata sobre las instrucciones Parallel.Foreach que se aplican a una lista en la que ambos bucles realizan operaciones en esa lista.

En mi ejemplo, los bucles están haciendo cosas diferentes, por lo que debería:

  1. ¿Utilizar bucles paralelos.Para cada uno anidados?
  2. Usuario Parallel.ForEach en el bucle principal y dejar el bucle interno como está?

Un Parallel.ForEach no necesariamente se ejecuta en paralelo, es solo una solicitud para hacerlo si es posible. Por lo tanto, si el entorno de ejecución no tiene el poder de la CPU para ejecutar los bucles en paralelo, no lo hará.

Si las acciones en los bucles no están relacionadas (es decir, si están separadas y no se influyen entre sí), no veo ningún problema al usar Parallel.ForEach tanto en los bucles internos como externos.

Realmente depende del entorno de ejecución. Podría realizar pruebas de tiempo si su entorno de prueba es lo suficientemente similar al entorno de producción y luego determinar qué hacer. En caso de duda, prueba ;-)

¡Buena suerte!