Como hacer que tus aplicaciones saquen mejor provecho a los procesadores disponibles hoy y a los que...

Post on 10-Jun-2015

1.042 views 0 download

Transcript of Como hacer que tus aplicaciones saquen mejor provecho a los procesadores disponibles hoy y a los que...

Como hacer que tus aplicaciones saquen mejor provecho a los procesadores disponibles hoy y a los que vendrán

Andrés IturraldeConsultor Senioraiturralde@ikom.clhttp://aiturralde.com

¿Porqué debería importarme el paralelismo?

• Los computadores están cambiando– La ley de Moore está tomando un giro

importante– Tecnologías SMP y Multi Core

CPU

Memoria

CPU CPU

Core

Memoria

Core

• Los usuarios están cambiando– Esperan aplicaciones rápidas y responsivas

¿A qué se refería Moore?

Dual-Core Itanium 2

Tendencias de CPU’s Intel (Fuentes: Intel, Wikipedia, K. Olukotun)

Pentium

386

Pentium 4

¿Qué debo hacer para esto?

• Paralelizar!

Thread B Thread C

QuantumExpirado

Acceso a Memoria

OperaciónI/O

Thread A

“Estado Wait”

DEMO

Como nos ayuda el paralelismo

Secuencial

Paralela Op1 Op2 Op3 Op4

Tiempo

Op5

CPU1

CPU1

CPU2

CPU3

CPU4

DEMO

• Programación en multiples hilos es “dificil” hoy– Realizable por ciertos subgrupos de especialistas senior– Patrones paralelos no son frecuentes, bien conocidos, ni

fáciles de implementar– Muchos problemas potenciales

Estoy convencido… ¿ahora qué?

• Las empresas tienen pocos deseos de ir “hacia la médula” del asunto– Los mejores desarrolladores deben enfocarse en valor de

negocio, no en concurrencia– Se necesitan simples maneras de permitir a todos los

desarrolladores escribir código concurrente

Soporte de paralelismo en .NET 4 y VS2010

Visual Studio IDE

Herramientas

.NET Framework 4

Parallel Debugger

Concurrency Visualizer

Thread Pool

Task Scheduler

Task Parallel Library

Parallel LINQ

Sync Primitives

Concurrent Collections

Runtime Concurrencia Manejada y Modelos de Programación

CLR

Extensiones Paralelas

• Nuevas API’s de paralelismos en .NET 4– Loops Paralelos– Parallel LINQ– Paralelismo fino (basado en Tareas)– Nuevos primitivos de sincronización y colecciones

concurrentes• Mejoras en el ThreadPool

Metas del TPL

• Hacer el paralelismo Simple– Implementando escenarios comunes– Pasando data de entrada y de salida de las operaciones paralelas– Manejando errores en operaciones paralelas– Interrumpiendo trabajos en progreso

• Haciendo el paralelismo Eficiente– Robando trabajos y tamaño variable de pedazos de trabajos– Auto ajustando el tamaño del ThreadPool para soportar cargas

variables– Reduciendo gastos generales para el trabajo paralelo

• Dando a los desarrolladores Control, si así lo desean– Opciones de creación y continuidad– Agendamiento de tareas fuera del ThreadPool

¿Qué es una Tarea?

• Representación de una operación asíncrona– Bloque ligero de paralelismo– Una forma de obtener un valor (o error) que existirá

en el futuro

• Un consistente set de abstracciones sobre el cual programar– Una manera sencilla de utilizar el ThreadPool para

paralelismo– Eficiente para paralelismo «rápido»– También eficiente para actividades de larga duración

DEMO

Tareas y Colas

Cola Global Colas Locales

Worker Thread #1

Worker Thread #2

Thread App.

Worker Thread #n

Task #1

Task #5Task #4Task #3

Task #2

DEMO

Recursos

• Visual Studio 2010– http://www.microsoft.com/visualstudio/en-us/download

• Guía para programación paralela– http://parallelpatterns.codeplex.com/

• Parallel Programming with .NET– http://blogs.msdn.com/b/pfxteam/

• Blog Andrés Iturralde– http://aiturralde.com