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?Entiendo el enhebrado en teoría pero no en la práctica en .net
Respuesta
Este es un gran recurso gratuito de Joseph Albahari. Threading in C#
Hay 4 formas básicas para sincronizar los hilos en .Net:
- de control BackgroundWorker
- WaitHandles
- funciones de devolución de llamada
- un objeto de votación asyncResult
Generalmente desea para 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 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 sepas que un hilo terminará mucho antes, por lo que puedes esperar a que termine, hacer un poco de trabajo y esperar a que el resto termine.
Las manijas 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 funciona, puede recurrir a la votación.
me ocurre de 5 maneras diferentes de obtener un nuevo hilo en .Net, también más o menos en orden:
- OS creado, normalmente como resultado de eventos de Windows Forms (incluyendo el 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(). Usted podría 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.
Dos grandes artículos:
What Every Dev Must Know About Multithreaded Apps
Understand the Impact of Low-Lock Techniques in Multithreaded Apps
Aunque este artículo no es exactamente lo que está buscando específicamente, se espera que sea de ayuda en general (es decir, es relacionado, y una muy buena lectura):
The Free Lunch Is Over: A Fundamental Turn Toward Concurrency in Software
Un buen sitio en Internet de recursos para aprender acerca de multi-threading en .NET:
Uno de los mejores recursos que conozco sobre el tema es el "enhebrado en C#" libro: http://www.albahari.com/threading/
I tiene una gran visión general de todos un desarrollador .NET necesidad de entender para programar aplicaciones de múltiples hilos.
- 1. Reemplazar condicionalmente por polimorfismo: agradable en teoría pero no práctico
- 2. Conozco el panorama general pero no puedo ponerlo en práctica
- 3. Enhebrado, CultureInfo .net, TPL, PLINQ
- 4. Enhebrado en Android
- 5. ¿Por qué las claves externas son más utilizadas en teoría que en la práctica?
- 6. Enhebrado en GWT (Cliente)
- 7. Forma práctica de explicar "Teoría de la información"
- 8. ¿Cómo funciona el enhebrado en Powershell?
- 9. C++ estática global sin fines de POD: teoría y práctica
- 10. Enhebrado cancelable.Timer en Python
- 11. Enhebrado en C
- 12. Pruebas unitarias: no se puede pasar de la teoría a la práctica
- 13. Secuestro de sesiones en la práctica
- 14. No entiendo el soporte de Async en servlets 3.0 API
- 15. No entiendo cómo funciona Westpac Payway API y NET
- 16. No entiendo itoa() en el libro de K & R
- 17. No entiendo el punto de independencia persistencia
- 18. ¿Podemos usar el enhebrado en PL/SQL?
- 19. no entiendo la pregunta de cierres en python
- 20. No entiendo la salida de este programa en C
- 21. No entiendo Dominios de aplicación
- 22. Delegados, no entiendo bien
- 23. No entiendo horking
- 24. Enhebrado en C#. Tarea interrumpible
- 25. No entiendo este pitón Para el bucle
- 26. regex que no entiendo
- 27. Teoría del almacenamiento en caché
- 28. No entiendo este Código
- 29. No entiendo este uso de la recursión
- 30. .NET no confía en mi certificado autofirmado, pero IE sí?