viernes, 11 de diciembre de 2015

Hilos en C#, Parallel.For... Foreach

El espacio de nombres System.Threading.Task contiene otra clase que puede ser usado para proceso en paralelo. La clase Parallel tiene un par de métodos estáticos -For, ForEach, Invoke - que usted puede usar para hacer trabajo en paralelo.

El paralelismo significa tomar una cierta tarea y dividir esta en un conjunto de tareas relacionadas que pueden ser ejecutadas simultáneamente. No debería sustituir los ciclos de su código por ciclos paralelos. Si tiene que realizar tareas que no sean secuenciales, puede usar la clase Parallel .

Incrementar el funcionamiento con proceso paralelo ocurre solamente cuando tenga un gran conjunto de trabajo para ser realizado y que puede ser realizado en paralelo. Para pequeños conjuntos de trabajo o para trabajo que requiera acceso a recursos de forma sincronizada, usar la clase Parallel  tienen efectos que degradan el funcionamiento.

La mejor forma de saber si debería usar trabajo en paralelo es medir los resultados. Los siguientes ejemplos usan Parallel.For y Parallel.ForEach.

using System;
using System.Threading;
using System.Threading.Tasks;

namespace UsandoParallelFor
{
    class Program
    {
        static void Main(string[] args)
        {
            Parallel.For(0, 10, i => 
            {
                Console.WriteLine("Ejecución en paralelo : {0} ", i);
                Thread.Sleep(1000);
            });

            Console.WriteLine("Fin de ejecución en paralelo.");

        }
    }

}



using System;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;

namespace UsandoParallelFor
{
    class Program
    {
        static void Main(string[] args)
        {
            var numbers = Enumerable.Range(0, 10);
            Parallel.ForEach(numbers, i =>
            {
                Console.WriteLine("Ejecución en paralelo : {0} ", i);
                Thread.Sleep(1000);
            });

        }
    }
}



No hay comentarios.:

Publicar un comentario