2009-07-02 21 views
5

Se me ha encomendado la tarea de escribir un servicio de alta disponibilidad y alta disponibilidad que se ejecutará en un cuadro multinúcleo.Compatibilidad con .NET Framework para hardware multinúcleo

¿Es necesario hacer uso de tareas de la Biblioteca Parellel a realmente apalancamiento un servidor de varios núcleos o será el servicio automagicamente correr más rápido si tiro más hardware (núcleos) en ella? ¿El framework .NET me proporciona la magia bajo las sábanas?

Como corolario, ¿habrá mejoras de rendimiento al actualizar el servidor con más núcleos (manteniendo las especificaciones de cada núcleo individual igual) para las aplicaciones .NET que no usan TPL?

Según mi comprensión (leyendo el libro de Joe Duffy y sus blogs), realmente necesita programar para multinúcleo. ¿Es precisa mi conclusión?

Respuesta

7

Esto es difícil de responder con precisión ya que el procesamiento en paralelo no es un problema genérico. Tendrá que analizar su proyecto para encontrar lugares donde pueda aprovechar el procesamiento paralelo.

Si su aplicación se puede dividir fácilmente en tareas concretas independientes, definitivamente mejorará el procesamiento en paralelo. Si su naturaleza es principalmente serial, múltiples núcleos/hilos realmente no ayudarán en absoluto.

Si ha determinado que las tareas paralelas representan el núcleo de su proceso, una biblioteca paralela puede ayudarlo a realizar las tareas básicas y facilitar el proceso.

+0

Gracias Paul. Mi aplicación definitivamente tendrá cierta cantidad de paralelismo y la aplicación será multiproceso. ¿La creación de subprocesos aprovechará el hardware multinúcleo? ¿El marco (o sistema operativo) decide si puede (o debería) ejecutar un hilo en un núcleo diferente, o tengo que programarlo explícitamente? – Sprash

+1

Solo use hilos. El SO se encargará de aprovechar los núcleos. ** esta es una respuesta más simplificada sin embargo. Si está por abordar un gran proyecto como este, vale la pena leer "Programación concurrente en Windows" http://www.amazon.com/Concurrent-Programming-Windows-Microsoft-Development/dp/032143482X/ref=sr_1_1?ie = UTF8 & s = books & qid = 1246579844 & sr = 8-1 –

3

Eche un vistazo a PLinq que vendrá en .Net 4.0. Le dará muchas capacidades de procesamiento en paralelo sin necesidad de administrar algoritmos de tarea/carga.

+0

Sí, estoy esperando ansiosamente PLinq y .NET 4.0. Han realizado un trabajo bastante extenso en esta área. Desafortunadamente no puedo arriesgarme con la versión alfa del framework para producción – Sprash

1

Un programa necesita tener varias rutas de ejecución para aprovechar algo más de 1 núcleo/procesador. Por lo general, esto se realiza ejecutando más de 1 subproceso, ya que la mayoría de la única forma de proporcionar más que la ruta de ejecución del sistema operativo es ejecutando varios procesos (ejecutables) o varios subprocesos dentro de un proceso.

Existen varias abstracciones de alto nivel incorporadas en los lenguajes modernos para tratar con mayor facilidad lo que es esencialmente multi-threading, pero mejor aprenda primero lo básico; Threads

+0

Sí, mi aplicación seguramente será multiproceso. ¿Solo el hecho de crear subprocesos aprovechará el hardware multi-core? – Sprash

+0

Cuando logra dividir el código que desea ejecutar, ejecutar en mutiple threads, entonces sí, el sistema operativo se encargará de ejecutar los hilos en diferentes núcleos. Por supuesto, el multihilado debe hacerse con mucho cuidado, no quiere terminar con condiciones de carrera, interbloqueos, inconsistencia de datos, etc. – nos

Cuestiones relacionadas