sábado, 25 de mayo de 2013

Introducción a la programación paralela

En este artículo vamos a dar un vistazo acerca de la programación paralela, para que nos sirve, conceptos importantes y que nos ofrece Microsoft .NET para implementarla, veamos:

¿Para qué nos sirve?  
  • La programación paralela nos sirve para ejecutar varias tareas de forma simultanea.
  • Se rige bajo el principio de que problemas grandes se pueden dividir en unos más pequeños, para ser resueltos simultáneamente.
  • Existen los siguientes tipos de paralelismo: a nivel de bit, instrucción, datos y tareas.     
El concepto de paralelismo toma fuerza, debido a que los procesadores en la actualidad buscan tener más núcleos para desempeñarse mejor, y no tener más velocidad con un solo núcleo debido a temas de recalentamiento.

Conceptos importantes:
  • Proceso: Proporciona los recursos necesarios para ejecutar un programa, se inicia con un código único de identificación y ocupa un espacio en memoria virtual, requiere al menos un hilo para ejecutarse. 
  • Hilos (Threads): Entidad dentro de un proceso que realmente ejecuta código. Todos los hilos comparten los recursos y memoria virtual del proceso donde se ejecutan.
Consideraciones:
  • A mayor cantidad de hilos, mayor uso de CPU, ya que el sistema operativo sede el recurso basado en el número de hilos. 
  • Las aplicaciones .NET usan al menos dos hilos para ejecutarse, uno para ejecutar su código y otro para el Collector. 
  • Cuando un proceso tiene muchos hilos consume mucho más tiempo de CPU que los demás y funciona bastante rápido, pero los demás procesos deben esperar más.
Diferenciemos dos conceptos que suelen confundirse como lo son Multithreading y paralelismo.

Multithreading v.s paralelismo
  • Multithreading Permite manejar varios hilos en una aplicación. 
  • Permite realizar tareas asíncronas, pero usa un solo core del procesador. 
  • Es complejo para controlar, difícil de depurar y no permite acceso a UI.
  • Paralelismo Permite implementar multithreading usando varios core del procesador. 
  • Permite un fácil manejo y buena depuración. 
  • Permite acceso a UI. 
  • Permite especificar cuantos core del procesador usar para un tarea en especifico.
¿Qué nos ofrece .NET Framework para trabajar paralelismo?
  • PLinq: Consultas Linq to Objects con paralelismo.
  • Data Parallel: Paralelismo con bucles.
  • Task: Agrupa instrucciones para ser ejecutas en paralelo.
  • Concurrent: Maneja sincronización en colecciones.
  • Depuración: Permite depurar diferentes hilos ejecutándose en paralelo. 
Esto es una breve introducción a la programación paralela, en próximos artículos veremos como implementar paralelismo en .NET, espero les sea de utilidad.

5 comentarios: