.net - safe - multithreading c# español
Entiendo enhebrar en teoría pero no en la práctica en.net (5)
Tengo una comprensión básica de cs-major de multi-threading, pero nunca he tenido que hacer nada más allá de temporizadores simples en una aplicación. ¿Alguien sabe de un buen recurso que me dará un recorrido sobre cómo trabajar con aplicaciones de subprocesos múltiples, explicando los conceptos básicos y tal vez presentando algunas de las cosas más difíciles?
Dos excelentes artículos:
Lo que cada desarrollador debe saber sobre las aplicaciones multiproceso
Comprender el impacto de las técnicas de bloqueo bajo en aplicaciones multiproceso
Aunque este artículo no es exactamente lo que está buscando específicamente, con suerte será de ayuda en general (es decir, está relacionado y es de muy buena lectura):
El almuerzo gratis ha terminado: un giro fundamental hacia la concurrencia en el software
Este es un gran recurso gratuito de Joseph Albahari. Enhebrado en C #
Hay 4 formas básicas de sincronizar hilos en .Net:
- Control de BackgroundWorker
- WaitHandles
- Funciones de devolución de llamada
- sondeo de un objeto ASyncResult
En general, desea comenzar en la parte superior de la lista y trabajar hacia abajo. Eso significa primero mirar y ver si un control de trabajador de fondo es apropiado para la situación. Sin embargo, casi asume formularios de Windows y que solo está generando un nuevo hilo.
Entonces, intente con los manejadores de espera. Los manejadores de espera son buenos para coordinar varios hilos juntos. Puedes echarlos a todos y esperar a que todos terminen, o si quieres mantener activo un determinado número, esperas uno solo y generas el siguiente cuando termine. O tal vez sepa que un hilo terminará mucho antes, por lo que puede esperar a que termine, haga un poco de trabajo y luego espere a que el resto termine.
Los manejadores de espera pueden parecer demasiado si, por ejemplo, solo está generando un hilo adicional y no quiere bloquear hasta que haya terminado. Entonces puede usar una devolución de llamada, de modo que la función que designe se invocará tan pronto como se complete la secuencia.
Finalmente, si y solo si por alguna razón ninguno de los anteriores funcionará, puede recurrir a la votación.
Puedo pensar en 5 maneras diferentes de obtener un nuevo hilo en .Net, también aproximadamente en orden:
- SO creado, normalmente como resultado del evento winforms (incluido BackgoundWorker).
- Obj.Begin ___ () / Fin ____ (). Ciertas clases de CLR ya tienen definidos estos métodos asíncronos y, obviamente, desea utilizarlos cuando estén disponibles.
- ThreadPool.QueueUserWorkItem (). Use esto la mayor parte del tiempo para crear sus propios hilos.
- Delegate.BeginInvoke () / EndInvoke (). Puede ajustar cualquier método de esta manera.
- Thread.Start (). Podrías hacerlo de esta manera, pero leí algo recientemente (no tengo el enlace ahora) que si QueueUserWorkItem no funciona, el método delegado es probablemente mejor.
Un buen recurso web para aprender sobre multi-threading en .NET:
Uno de los mejores recursos que conozco sobre el tema es el libro "threading in C #": http://www.albahari.com/threading/
Tengo una gran descripción de todo lo que un desarrollador de .net necesita comprender para programar aplicaciones multi-hilos.