Tengo datos que deben ejecutarse en una determinada cadena de fondo. Tengo un código proveniente de todos los otros hilos que necesitan invocar esto. ¿alguien tiene un buen tutorial o mejores prácticas en tener una cola para la sincronización para apoyar este requisito roscadoEjemplo de mejor cola de subprocesos/mejores prácticas
Respuesta
Usted podría:
- implementar un producer/consumer model (que no sirven de hilos de seguridad generic queue)
- o utilizar en su fondo enhebrar una synchronized queue, que no hace comentarios sobre el proceso de enumerar a través de una colección.
Este es un interesante artículo sobre ThreadPools:
Para los casos de uso más simples que también podría usar la clase ThreadPool de .Net.
Una de mis soluciones favoritas para este problema es similar al patrón producer/consumer
.
Creo un hilo maestro (prácticamente el Main()
de mi programa) que contiene un objeto de cola de bloqueo.
Este hilo maestro hace girar varios hilos de trabajo que simplemente sacan cosas de la hebra de bloqueo central y las procesan. Dado que es una cola de bloqueo segura para la ejecución de los hilos, los bits de sincronización son fáciles: la llamada TaskQueue.Dequeue()
se bloqueará hasta que el productor/hilo principal ponga en cola una tarea.
Puede administrar dinámicamente la cantidad de trabajadores que desee o solucionarlos de acuerdo con una variable de configuración, ya que todos simplemente están sacando cosas de la cola, el número de trabajadores no agrega ninguna complejidad.
En mi caso, tengo un servicio que procesa varios tipos diferentes de tasks
. Tengo la cola escrita para manejar algo genérico como TaskQueueTask
. A continuación, hago una subclase y anulo el método Execute()
.
También probé el enfoque .NET threadpool donde puedes tirar cosas a la piscina con mucha facilidad. Era extremadamente simple de usar pero también proporcionaba poco control, y no garantizaba el orden de ejecución, el tiempo, etc. Se recomienda solo para tareas livianas.
Aquí hay una cola de bloqueo: http://www.eggheadcafe.com/articles/20060414.asp –
Consulte Threading in C#, por Joseph Albahari, referencia muy completa sobre multihilo. En particular, cubre producer/consumer queues.
Su enlace de enhebrado al Albahari es un recurso muy bueno. – CaptainBli
Puede probar esta solución. Le muestra cómo implementar el patrón productor-consumidor. También tiene alguna explicación sobre qué se puede hacer con ella. Como diferentes combinaciones de la cantidad de productores y consumidores.
ambos enlaces no son válidos ahora. – Lichader
- 1. Cola en C++ - ejemplo simple
- 2. un buen ejemplo de las mejores prácticas
- 3. Ejemplo de uso de los servicios de cola de audio
- 4. Mejor asio impulso deadline_timer ejemplo
- 5. ASP.NET: el mejor sistema de cola para una nueva aplicación
- 6. Ejemplo de patrón Singleton
- 7. Archivos semi editables (por ejemplo, archivos de configuración) y control de versiones: ¿prácticas recomendadas?
- 8. ¿Cuál es la mejor forma de formatear mensajes para hacer cola?
- 9. Mejores prácticas de CoreData
- 10. Mejor y más simple ejemplo de 'conflicto semántico'?
- 11. Buenas prácticas de NoSQL
- 12. Ejemplo de aplicación .net utilizando Amazon SQS
- 13. Mejores prácticas de ActionListener
- 14. C# cola de prioridad
- 15. cola de python y cola de multiprocesamiento: ¿cómo se comportan?
- 16. Sistema de cola de mensajes
- 17. Prácticas de codificación desactualizadas
- 18. ¿Algoritmo de reducción de cola?
- 19. Buen lugar para buscar, por ejemplo, Diseños de bases de datos - Mejores prácticas
- 20. Ruby on Rails 3 ejemplo de mejores prácticas aplicación de código abierto
- 21. ejemplo de aplicación que usa vaadin
- 22. Cola de descarga en Android
- 23. Recursividad de cola en C++
- 24. Sincronización de una cola
- 25. Mejores prácticas de Javascript
- 26. recursión de cola en Haskell
- 27. ¿array_walk_recursive utiliza la optimización de la cola de cola?
- 28. ¿Cuál es la mejor práctica de crear cola de tareas persistentes en la aplicación iOS?
- 29. jQuery orden de cola de múltiples documentos listos
- 30. Prácticas recomendadas de JavaScript
El ejemplo de código en el [primer link] (http: // MSDN. microsoft.com/en-us/library/yy12yx1f.aspx) no se recomienda ya que tiene una posible condición de carrera que resulta en señales perdidas. ¡No lo uses! –