sistema qué programación programacion procesamiento practico paralelo paralela paradigmas lenguajes importancia hilos con computadoras computacion caso arquitectura .net multithreading parallel-processing

.net - qué - Enhebrado vs. procesamiento en paralelo



qué es la programación en paralelo (4)

Microsoft .NET 4.0 presenta nuevas "mejoras paralelas" a su marco. Me pregunto cuál es la diferencia entre hacer una aplicación que use las funciones estándar System.Threading versus las nuevas mejoras paralelas.


El marco paralelo utiliza el modelo de subprocesamiento .NET debajo que a su vez se basa en el modelo de subprocesamiento de Windows. Sin embargo, se ha realizado una gran cantidad de optimización en el marco general para hacer que la biblioteca paralela sea más eficiente.

Este blog tiene detalles adicionales.


El procesamiento en paralelo es solo una interfaz elegante para crear subprocesos automáticamente. Es más fácil usar la extensión de procesamiento en paralelo para la mayoría de las tareas.



Probablemente, la diferencia más importante entre las Extensiones Paralelas y el subprocesamiento regular es el flujo de control.

Un hilo, creado usando new Thread(...) o ThreadPool.QueueUserWorkItem terminará en un punto completamente indeterminado en el tiempo. Si escribe este código:

ThreadPool.QueueUserWorkItem(() => { Thread.Sleep(1000); Console.WriteLine("Work Finished"); }); Console.WriteLine("Item Queued");

El texto del Item Queued aparecerá de inmediato, y el Work Finished se imprimirá después de aproximadamente un segundo de retraso.

Por otro lado, si escribe algo similar con extensiones paralelas:

Parallel.For(0, 10, i => { Thread.Sleep(1000); Console.WriteLine("Test {0}", i); }); Console.WriteLine("Finished");

Lo que verá en este caso es un retraso de 1 segundo antes de que ocurra algo, luego una serie de mensajes de "Prueba" en orden aleatorio y luego el texto Finished .

En otras palabras, ejecutar tareas en paralelo en realidad no altera el flujo del programa. Ejecutará diferentes tareas en diferentes subprocesos para que puedan ejecutarse en múltiples núcleos de CPU, con el fin de mejorar el rendimiento general del programa, pero en lo que respecta al programador típico, estas tareas no se ejecutan realmente en el "fondo". "como lo serían con un hilo". No tiene que cambiar la estructura de su programa ni hacer nada especial para recibir una notificación cuando finalice el trabajo. No tiene control sobre lo que ocurre dentro del bloque paralelo, pero sí sabe que el bloque no devolverá el control hasta que se completen todas las tareas paralelas.

Aunque las extensiones paralelas son excelentes para esto, cabe mencionar que los PX no son de ninguna utilidad cuando realmente necesita ejecutar una tarea en segundo plano, como implementar el planificador o delegar en un subproceso de trabajo para mantener una UI receptiva. Aún necesita usar hilos o componentes asíncronos para eso.