Parallel For en C#
En este artículo, voy a discutir el Parallel For estático en C# con ejemplos. Lea nuestro artículo anterior antes de continuar con este artículo donde discutimos los conceptos básicos de la programación paralela en C#. Como parte de este artículo, analizaremos la necesidad y el uso del bucle For paralelo en comparación con el bucle for de C#. Entonces, comencemos la discusión con una de las preguntas de entrevista más frecuentes.
¿Cuál es la diferencia
entre el bucle Parallel For y el bucle for de C# estándar?
La principal diferencia entre el bucle Parallel
For y el bucle for C# estándar es la siguiente
- En el caso del bucle for estándar de C#, el bucle se ejecutará con
un solo subproceso, mientras que, en el caso del bucle For paralelo, el
bucle se ejecutará con varios subprocesos.
- La segunda diferencia es que, en el caso del bucle for estándar de
C#, el bucle se itera en orden secuencial mientras que, en el caso del
bucle For paralelo, el orden de la iteración no va a ser secuencial.
Cuando las iteraciones son independientes entre sí, significa que las iteraciones posteriores no necesitan las actualizaciones de estado realizadas por las iteraciones anteriores, entonces, en tales casos, necesitamos usar Task Parallel Library (TPL) para ejecutar cada iteración en paralelo en todos los núcleos disponibles. Además, la iteración debería ser una iteración costosa; de lo contrario, obtendremos un rendimiento negativo, que también discutiremos como parte de este artículo.
Bucle Foreach
El bucle Foreach en C# se ejecuta en un solo subproceso y el procesamiento se realiza secuencialmente uno por uno. El bucle Foreach es una característica básica de C# y está disponible desde C# 1.0. Su ejecución es más lenta que la de Parallel.Foreach en la mayoría de los casos.
Bucle Parallel.ForEach
El bucle Parallel.ForEach en C# se ejecuta en varios subprocesos y el procesamiento se lleva a cabo de manera paralela. El bucle Parallel.ForEach no es una característica básica de C# y está disponible desde C# 4.0 y versiones posteriores. Antes de C# 4.0 no podemos usarlo. Su ejecución es más rápida que foreach en la mayoría de los casos. Para usar el ciclo Parallel.ForEach, necesitamos importar el espacio de nombres System.Threading.Tasks en la directiva de uso.
Pero conoces bien tu aplicación y puedes decidir cuál quieres usar.
Estoy dando 2 ejemplos, en
el primer ejemplo, el bucle foreach tradicional es más rápido que el bucle
Parallel.foreach, mientras que en el segundo ejemplo, el bucle foreach
tradicional es muy lento en comparación con Parallel.foreach.