¿Cuáles son las reglas con respecto al engendramiento de nuevos hilos dentro de otros hilos en ejecución? Tengo una aplicación C# que maneja dos hilos básicos en el fondo. Hace poco introduje algunas cosas pesadas de IO, y estaba pensando en ponerlas en el hilo. ¿Los hilos anidados dentro de sí mismos son geniales?Hilos Anidados?
Respuesta
Los subprocesos no se modelan como una jerarquía para la mayoría de sus procesos; el concepto de "anidar" simplemente no existe.
Un hilo se ejecuta en paralelo a todos los demás hilos, independientemente de qué hilo lo haya creado. Las únicas cosas que la materia en la creación de un hilo es si se trata de un hilo de fondo o un hilo de primer plano y la prioridad de la rosca:
prioridad determina el número de rebanadas de tiempo se da el hilo al competir con otros hilos para recursos. Mayor prioridad significa más rebanadas.
Los hilos de primer plano mantienen un proceso vivo hasta que se completa su trabajo. Para los hilos de fondo, cuando todos los hilos de primer plano completan la ejecución en un proceso, el proceso finaliza y los hilos de fondo se terminan, independientemente de su trabajo completado.
Bueno, en la mayoría de los sistemas hay un concepto de hilo padre e hijo. Esto suele ser relevante porque solo el subproceso padre obtendrá un identificador para el subproceso recién lanzado, p. para esperar que termine. Entonces hay una especie de jerarquía ... – sleske
Él dijo C# entonces presumo Windows, no hay tal concepto de un hilo padre/hijo. – Michael
Los hilos no se anidan unos dentro de otros - los hilos pertenecen a un proceso. Entonces, si tiene hilos A & B, y luego cada uno crea C & D, C & D no pertenecen a A & B - pertenecen a su proceso.
Así que sí, la creación de subprocesos adicionales de subprocesos de fondo es aceptable.
La mejor solución que he encontrado para el problema genérico de subprocesamiento múltiple siempre ha sido tener un conjunto de "subprocesos de trabajo" en ejecución constante para los que crea trabajos que se colocan en una cola. El siguiente hilo de trabajo disponible sacará el próximo trabajo de la cola y comenzará a generarlo. Esto le da la capacidad multiproceso que uno esperaría y la encapsulación necesaria para evitar que la cabeza explote.
Suena sensato y óptimo. Consideraré esto, gracias – Olaseni
Si el subproceso principal está esperando en el subproceso secundario, esto presenta un nuevo requisito de sincronización que puede provocar interbloqueo.
ejemplo: (T significa hilo, R para el recurso compartido)
- cerraduras T1 R1
- T1 comienza T2
- T3 cerraduras R2
- T2 espera en R2
- espera T1 en T2
- T3 espera en R1
- 1. persistente problema inclusión de documentos anidados anidados
- 2. Java: bloques de sincronización anidados
- 3. Hilos Java vs Hilos OS
- 4. UINavigationControllers anidados
- 5. ¿Hilos dentro de hilos en Java?
- 6. Múltiples hilos o procesos con hilos
- 7. Hilos preventivos Vs Hilos no preceptivos
- 8. MongoDB conjuntos anidados
- 9. Desencadenadores de UpdatePanel anidados
- 10. Json.NET: deserializar diccionarios anidados
- 11. ¿Cómo encontrar directorios anidados?
- 12. Ancestry Rails anidados forma
- 13. Comentarios anidados en C++
- 14. DesignMode con controles anidados
- 15. lotes bucles for anidados
- 16. NameSpaces anidados en C++
- 17. contradictorios rasgos heredados anidados
- 18. Tipos anidados en clojure?
- 19. Elementos DIV anidados
- 20. form_for con recursos anidados
- 21. repositorios git anidados?
- 22. Presentadores anidados con GWTP
- 23. Métodos anidados, mejor práctica
- 24. mass_assignment_authorizer y atributos anidados
- 25. Bigote + objetos anidados
- 26. bucles anidados en MySQL
- 27. despejando flotadores anidados
- 28. Archivos apk.config (web.config) anidados
- 29. Comentarios anidados en XML?
- 30. Dapper ORM Objetos anidados
No solo está bien, no hay otra manera de hacerlo. Lo único que puede crear un hilo es un hilo. –