Estrictamente hablando, la distinción entre paralelo, asincrónico y concurrente debe hacerse aquí.
Paralelo significa que una "tarea" se divide entre varias subtareas menores que se pueden ejecutar al mismo tiempo. Esto requiere una CPU multinúcleo o una computadora con varias CPU, donde cada tarea tiene su núcleo o CPU dedicado. O múltiples computadoras. PLINQ (paralelismo de datos) y TPL (paralelismo de tareas) entran en esta categoría.
Asincrónico significa que las tareas se ejecutan sin bloquearse entre sí. La expresión asíncrona de F #, Rx, patrón de inicio/fin son todas las API para programación asíncrona.
La concurrencia es un concepto más amplio que la paralelización y la asincronía. Concurrencia significa que varias "tareas" se ejecutan al mismo tiempo, interactuando entre sí. Pero estas "tareas" no tienen que ejecutarse en unidades de computación físicas separadas, como se entiende en la paralelización. Por ejemplo, los sistemas operativos multitarea pueden ejecutar múltiples procesos al mismo tiempo, incluso en equipos de una sola CPU de un solo núcleo, utilizando intervalos de tiempo. La concurrencia se puede lograr, por ejemplo, con el modelo Actor y el envío de mensajes (por ejemplo, buzón de F #, procesos de Erlang (Retlang en .Net))
Los hilos son un concepto relativamente bajo en comparación con los conceptos anteriores. Los subprocesos son tareas que se ejecutan dentro de un proceso, se ejecutan simultáneamente y son administrados directamente por el programador del sistema operativo. Puede implementar la paralelización cuando el sistema operativo asigna cada subproceso a un núcleo separado, o un modelo Actor implementando cola de mensajes, enrutamiento, etc. en cada subproceso.
Algunos enlaces útiles para los datos en bruto: http://msdn.microsoft.com/en-us/concurrency/ee851578.aspx http://channel9.msdn.com/shows/The + Knowledge + Chamber/Multi-Core-and-Parallel-Programming-Practices/ http://blogs.msdn.com/pfxteam/rss.xml – Brian
Bueno, PLINQ/'Parallel' es definitivamente el más fácil de usar, pero no aplicable en todas las situaciones –