AsParallel – Sabias que existe? porque no lo usamos!

Muchos desarrolladores continúan si utilizar los “pragmas” que aprovechan y explotan el rendimiento de nuestros equipos con procesadores de varios núcleos.


Dejando de pensar en ‘single’ con tan solo un ‘AsParallel’ nuestros bucles pueden lucir mucho mas agiles.



 


Da un vistazo al siguiente código, te animo a experimentar y perder el miedo a usarlo… et tiempo… si lo cronometras… nos dará la razón.
En este ejemplo podras cronometrar el tiempo empleado en ejecutar tres ‘pings’ en blucle clasico y el siguiente con AsParallel… veras la diferencia!


    ' Sacar partido a la ejecucion paralela, cuando disponemos de mas de un nucleo
    '
    Sub Main()
        Console.WriteLine("Number of processors : " + Environment.ProcessorCount.ToString)
        Dim ips = {"192.168.1.1""192.168.1.3""192.168.1.5"}
        Dim start As DateTime = Now
        ' test de ejecucion para for each clasico
        Dim pings = From ip In ips
                    Select New Ping().Send(ip)
        For Each ping In pings
            Console.WriteLine("{0} : {1}", ping.Status, ping.Address)
        Next
        Console.WriteLine(Now.Subtract(start))
        ' test de ejecucion para for each AsParallel
        Dim start2 As DateTime = Now
        Dim pings2 = From ip In ips.AsParallel()
                     Select New Ping().Send(ip)
        For Each ping In pings2
            Console.WriteLine("{0} : {1}", ping.Status, ping.Address)
        Next
        Console.WriteLine(Now.Subtract(start2))
        Console.ReadLine()
    End Sub

 


Saludos,
PepLluis,



Eso si, después de conversar con un amable lector, ADVERTIROS… que como todo debe hacerse un buen uso con criterio y conocimiento de causa, aplicándolo en funciones donde se justifique :  Pero sin dejar de transmitiros que también es contraproducente dejar de usar las ventajas de utilizar grandes facilidades por el miedo que nos produce experimentar con ellas… así que Ánimos… AsParallel! (Gracias HB)

4 thoughts on “AsParallel – Sabias que existe? porque no lo usamos!”

  1. Ojo, que esto no siempre es recomendable usarlo, hay que tener en cuenta muchos detalles, qué operaciones se hacen, el entorno donde se ejecuta, etc.
    Aquí viene bien en paralelizar porque la propia acción no requiere de ninguna sincronización entre hilos ni ningún cambio de contexto entre hilos significativo, y por el tipo de trabajo que requiere aquí la comunicación entre equipos.
    Otra cosa a tener en cuenta es que Environment.ProcessorCount nunca es de fiar para este tipo de trabajos, un proceso no tiene por qué poder hacer uso de todos ellos, ni todos tienen por qué ser reales.

  2. Mis comentarios más que por ti, iban por cualquier posible lector. Que no se pongan a usar esto, Parallel.For o cualquier otra cosa relacionada con hilos sin cabeza, que los hilos pueden parecer algo sencillo de primeras, pero no es así, y muchos son los casos en los que pueden causar problemas o hacer que una aplicación vaya peor si se les da un mal uso.

    Mismamente el otro día vi cómo a un conocido le querían hacer usar múltiples hilos en un sitio donde no tenía sentido alguno.

Leave a Reply

Your email address will not be published. Required fields are marked *


*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>