¿Por qué es más costoso crear un hilo nuevo que mantenerlos inactivos?

ThreadPool mantiene los subprocesos inactivos en lugar de crearlos y eliminarlos, aunque no todo el tiempo según la cantidad de subprocesos que tenga en un momento determinado.

Aunque no conozco todo el proceso durante la creación y destrucción de un subproceso, ¿por qué es más costoso que tener subprocesos inactivos?

preguntado el 12 de junio de 12 a las 18:06

3 Respuestas

Bueno, porque en pocas palabras, un subproceso inactivo no funciona cualquier cosa. Está esperando a que haya trabajo. La creación de un hilo implica la asignación de memoria, el equilibrio de carga... todo tipo de cosas entre bastidores.

Respondido el 12 de junio de 12 a las 18:06

Pero aún contiene memoria, sobrecarga, etc. - Tarik

@Tarik bueno, sí, pero asumí que el OP significaba caro solo en el sentido del tiempo de cálculo. editar - lol, eres el OP. Bueno, entonces sí, tienes razón - Felipe Schmidt

pero cuando compara la sobrecarga física/de memoria con el tiempo de cálculo, no es nada. El número máximo predeterminado de subprocesos es algo así como 1250 subprocesos totales por CPU, por lo que no es que por lo general sean muy limitados. Pero cuando el grupo de subprocesos ve que se está agotando, liberará subprocesos inactivos como mejor le parezca. Así que mantenerlos abiertos es lo más parecido a lo mejor de ambos mundos: Felipe Schmidt

@Tarik Por lo general, lo eficiente que eres en el trabajo es mucho más importante que lo eficiente que eres cuando no tienes nada que hacer. - David Schwartz

Al crear un hilo administrado, suceden muchas cosas. Obviamente, se crean las estructuras de datos nativas y administradas para el subproceso. Además, los subprocesos administrados comprometen todo su espacio de pila de 1 MB y se asignan estructuras de datos adicionales por subproceso. En resumen, esta es una asignación muy costosa.

Manteniendo los subprocesos y reutilizándolos (por ejemplo, a través del grupo de subprocesos), este costo se amortiza. Dicho esto, aún no desea tener una cantidad excesiva de subprocesos dando vueltas, ya que consumen recursos incluso cuando están inactivos. En consecuencia, el grupo de subprocesos finalizará los subprocesos inactivos periódicamente para recuperar recursos.

Respondido el 12 de junio de 12 a las 18:06

Simplemente porque los subprocesos inactivos no hacen nada.

La creación de un subproceso realiza una gran cantidad de trabajo (asignación de memoria, creación de las estructuras de datos necesarias para administrar el subproceso, etc.). Todo ese trabajo se realiza una vez para un subproceso agrupado, en lugar de realizarlo una vez cada vez que hay trabajo para un subproceso.

Respondido el 12 de junio de 12 a las 18:06

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.