En this tutorial web sobre cómo enhebrar en C#, Joseph Albahari escribe: "¡No te duermas en hilos agrupados!" ¿Por qué no deberías hacer esto? ¿Qué tan gravemente puede afectar el rendimiento? (No es que quiera hacerlo, solo tengo curiosidad)Dormir en un hilo de C# agrupado
Respuesta
El hilo es un objeto de gran peso.
La creación de un nuevo subproceso requiere muchos recursos, como asignar 1 MB a una pila administrada, crear un objeto de subproceso administrado, pila de kernel, objeto de subproceso kernel, bloque de entorno de subproceso de usuario. Todo esto lleva tiempo y memoria. Por lo tanto, no desea crear y destruir objetos muy rápidamente. Además, una vez que tenga más de un cambio de contexto de subproceso también necesitará algunos recursos
El grupo de subprocesos es un lugar donde CLR puede poner subprocesos no utilizados, en caso de que su aplicación lo necesite.
Threadpool contiene inicialmente 0 subprocesos, una vez que solicite un subproceso de un grupo, el grupo creará rápidamente el número mínimo de subprocesos definidos para el grupo. Después de alrededor de 2 minutos, se eliminan los hilos no utilizados. Pero si la carga aumenta y necesita más subprocesos, el grupo de subprocesos creará lentamente nuevos subprocesos hasta alcanzar el límite máximo. No puede tener más hilos que el máximo, todas las solicitudes nuevas se pondrán en cola y se ejecutarán una vez que un hilo de trabajo haya regresado al grupo. En peor de los casos puede obtener OutOfMemoryException
Si un hilo tomado de una piscina es bloqueada,:
- administra los recursos
- no hace ningún trabajo útil, mientras que una aplicación puede necesitar este tema por una nueva solicitud
- saltos de escalabilidad mediante la introducción de bloques
Solo hay un número limitado de subprocesos en el grupo de subprocesos; Los grupos de subprocesos están diseñados para ejecutar de manera eficiente una gran cantidad de tareas cortas. Confían en que cada tarea termine rápidamente, para que el hilo pueda regresar al grupo y ser utilizado para la próxima tarea.
Así que dormir en un subproceso de grupo de subprocesos priva del grupo, que eventualmente puede quedarse sin subprocesos disponibles, y no puede procesar las tareas que le asigna.
El grupo de subprocesos está pensado para realizar rápidamente una tarea relativamente corta en un subproceso diferente sin tener que gastar el costo de crear un nuevo subproceso. El grupo de subprocesos tiene un número máximo de subprocesos, y una vez que se alcanza, las tareas se ponen en cola hasta que un subproceso esté disponible.
Un subproceso que duerme en el grupo de subprocesos, por lo tanto, mantendrá la cola o contribuirá al agotamiento del grupo de subprocesos.
- 1. Dormir en un hilo (Hilos C/POSIX)
- 2. Cómo dormir un hilo de Boost C++
- 3. Alternativa al hilo. ¿Dormir en C#?
- 4. Dormir un hilo por un tiempo indefinido en Linux
- 5. cómo terminar un hilo de dormir en pthread?
- 6. Dormir un hilo hasta que se atienda un evento en otro hilo
- 7. Dormir un hilo de refuerzo durante algunos nanosegundos
- 8. Cómo dormir o pausar un PThread en c en Linux
- 9. ¿Hay alguna alternativa para dormir() en C?
- 10. Dormir tarea (System.Threading.Tasks)
- 11. Dormir en Fortran
- 12. Dormir en JQuery?
- 13. Cómo matar un hilo C#?
- 14. ¿Cómo matar un hilo instantáneamente en C#?
- 15. Dormir sin bloqueo en C# 5.0 (como setTimeout en JavaScript)
- 16. Dormir por una duración exacta
- 17. cambiar una clave principal de no agrupado a Agrupado
- 18. Cambiar el fondo de un UITableView agrupado
- 19. Método de hilo C# ¿devuelve un valor?
- 20. Comportamiento 'Dormir' extraño entre sistemas
- 21. Intentando dormir bien en Linux
- 22. ¿Cómo emulo "dormir" en NodeJS?
- 23. Volviendo un diccionario en C# en un entorno multi-hilo
- 24. Usando NSThread dormir en una NSOperation
- 25. Demonio HTTP C o C++ en un hilo?
- 26. Ejecutando un método con parámetros en un hilo en C#
- 27. Necesito implementar una forma de dormir este hilo hasta que tenga trabajo que hacer
- 28. Cómo generar hilo en C#
- 29. NewSequentialId en UniqueIdentifier Index agrupado
- 30. Cómo evitar dormir en Android
Su primera línea parece estar en contradicción con el resto de lo que decir. Sin duda, mantener la cola o el agotamiento del hilo es un degradado de rendimiento directo? – Chris
Quise decir que dormir en un subproceso de grupo no degradará el rendimiento de ese subproceso. Está un poco mal redactado, estoy de acuerdo. Lo he eliminado – Sven
Ah, sí, entiendo a qué te refieres. No degradará el rendimiento en un subproceso, pero degradará el rendimiento de todo el proceso utilizando el grupo. Eso tiene sentido. :) – Chris