2010-03-25 24 views
5

¿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?

+2

No solo está bien, no hay otra manera de hacerlo. Lo único que puede crear un hilo es un hilo. –

Respuesta

8

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.

+1

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

+0

Él dijo C# entonces presumo Windows, no hay tal concepto de un hilo padre/hijo. – Michael

4

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.

1

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.

+0

Suena sensato y óptimo. Consideraré esto, gracias – Olaseni

2

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