2010-01-28 16 views
32

Estoy aprendiendo Multi Threading por el momento, en C#, pero al igual que con todo aprendizaje, me gusta aprender las mejores prácticas. Por el momento, el área parece borrosa. Entiendo los conceptos básicos, y puedo crear hilos.Multi Threading

¿Qué debo tener en cuenta al crear aplicaciones multihilo? ¿Hay alguna regla establecida o mejores prácticas que deba conocer? ¿O algo para recordar para evitar tropiezos en la línea?

Gracias por las respuestas.

+1

Si está utilizando C#, debería considerar utilizar la Biblioteca de tareas paralelas. Le permite pensar en Tareas y barreras en lugar de hilos y bloqueos. Mejora la abstracción. –

+0

@Ade Miller: este es un gran consejo: agregaré que también puede usar TPL y PLINQ en .Net3.5 instalando las extensiones reactivas: http://msdn.microsoft.com/en-us/ devlabs/ee794896.aspx –

Respuesta

33

Además de la MSDN Best Practices, voy a añadir:

  1. No hagas tus propios hilos. Prefiere usar el ThreadPool (o las nuevas Tareas Task Parallel Library). Administrar su propio hilo rara vez, o nunca, es la decisión de diseño correcta.
  2. Tenga mucho cuidado con los problemas relacionados con la interfaz de usuario. Control.Invoke (Windows Forms) y Dispatcher.Invoke (WPF), o use SynchronizationContext. Actual con Publicar/Enviar
  3. Favor de usar el BackgroundWorker class cuando corresponda.
  4. Trate de mantener la sincronización a través de las cerraduras a un mínimo
  5. Asegúrese de sincronizar todo lo que requiere la sincronización
  6. favor los métodos de la Interlocked class cuando sea posible más de bloqueo

Una vez que se obtiene más avanzada, y son se trata de optimizar, otras cosas que debe buscar:

  1. cuidado con los false sharing. Esto es especialmente problemático cuando se trabaja con matrices, ya que cada matriz escribe en cualquier elemento de una matriz incluye una comprobación de límites en .NET, que en efecto causa un acceso en la matriz cerca del elemento 0 (justo antes del elemento 0 en la memoria). Esto puede causar perf. ir cuesta abajo dramáticamente.
  2. Tenga cuidado con los problemas de cierre, especialmente cuando trabaje en situaciones de bucle. Errores desagradables pueden ocurrir si está cerrando una variable en el ámbito incorrecto al hacer un delegado.
9

MSDN - Managed Threading Best Practices

Ese artículo de MSDN hace un muy buen trabajo en tocar en las zonas de peligro y dar las mejores prácticas para la gestión/trabajar en torno a esas áreas.

2

Recomiendo encarecidamente que empiece digiriendo esto: http://www.albahari.com/threading/.

+0

Es bueno que hayas mencionado eso. Imprimí ese PDF de 80 páginas y ahora lo voy a hacer. –

Cuestiones relacionadas