Entiendo que el nuevo TPL (Task Parallel Library) ha implementado el Parallel.ForEach() de modo que funcione con "paralelismo expresado". Es decir, no garantiza que sus delegados se ejecutarán en varios hilos, sino que comprueba si la plataforma de host tiene múltiples núcleos, y si es verdadero, solo distribuye el trabajo entre los núcleos (esencialmente 1 hilo por núcleo) ..NET 4 ... Parallel.ForEach() pregunta
Si el sistema host no tiene múltiples núcleos (cada vez es más difícil encontrar una computadora), ejecutará el código de forma secuencial como lo haría un ciclo foreach "regular". Bastante genial, francamente.
Normalmente me gustaría hacer algo como lo siguiente para colocar mi operación de larga ejecución de un subproceso de fondo de la ThreadPool:
ThreadPool.QueueUserWorkItem (nueva WaitCallback (targetMethod), nuevo Object2PassIn());
En una situación en la que la computadora host solo tiene un solo núcleo, ¿el TPL Parallel.ForEach() coloca automáticamente la invocación en una cadena de fondo? O bien, ¿debería invocar de manera ordenada cualquier llamada TPL desde un segundo plano, de modo que si estoy ejecutando desde una única computadora central, al menos esa lógica estará fuera del hilo de envío de la GUI?
Mi preocupación es que si dejo el TPL a cargo de todo esto, quiero asegurarme si determina que es una caja de un solo núcleo que sigue identificando el código que está dentro del lazo Parallel.ForEach() en un hilo de fondo como lo hubiera hecho, para no bloquear mi GUI.
Gracias por cualquier pensamientos o consejos que pueda tener ...
Solo un rápido seguimiento de esto: TPL Rocks! No puedo olvidar cuánto más rápido puedo hacer varias aplicaciones con solo unos pequeños ajustes usando llamadas TPL en comparación con la tarifa "estándar". Estoy viendo los tiempos de procesamiento en varios artículos recortados en más del 80%. MS realmente lo dejó fuera del parque en este caso, gran trabajo chicos. – BonanzaDriver