Post on 10-Jun-2015
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