¿Qué es un pool de hilos? ¿Por qué usar pools de hilos? ¿Cómo usar los pools de hilos?
1. ¿Qué es un pool de hilos?
La clase ThreadPool del .NET Framework proporciona un pool de hilos que puede usarse para ejecutar tareas, enviar elementos de trabajo, gestionar E/S asíncrona, esperar en nombre de otros hilos y gestionar temporizadores. ¿Entonces, qué es un pool de hilos? El pool de hilos es en realidad un "pool" que almacena objetos de hilo, y proporciona algunos métodos básicos, como establecer el número mínimo/máximo de hilos en el pool, poner en cola los métodos a ejecutar, etc. ThreadPool es una clase estática, por lo que puede usarse directamente sin crear objetos.
2. ¿Por qué usar pools de hilos? ¿Cuáles son los beneficios?
La web oficial de Microsoft dice lo siguiente: Muchas aplicaciones crean un gran número de hilos que están en suspenso, esperando a que ocurran eventos. También hay muchos hilos que pueden entrar en hibernación solo para despertarse periódicamente y consultar información de estado cambiada o actualizada. Pools de hilos, que te permiten usar los hilos de forma más eficiente a través de un grupo de hilos de trabajo gestionados por el sistema.
En resumen, cada nuevo hilo necesita ocupar espacio de memoria y otros recursos, y con tantos hilos nuevos, muchos de ellos están inactivos o esperando que se liberen recursos. Hay muchos hilos que solo hacen un pequeño trabajo de forma periódica, como actualizar datos, etc., que son demasiado desperdiciadores para dibujar, y es raro que un gran número de hilos estallen en programación real y luego terminen en un corto periodo de tiempo. Por ello, se propuso el concepto de pools de hilos. Si la aplicación realiza otra petición al pool de hilos, el hilo en estado pendiente se activa y ejecuta la tarea sin crear uno nuevo, lo que ahorra mucha sobrecarga. El sistema destruirá automáticamente los hilos solo cuando el número de hilos alcance el máximo de hilos. Por lo tanto, usar pools de hilos puede evitar grandes gastos de creación y destrucción, tener mejor rendimiento y estabilidad, y en segundo lugar, los desarrolladores pueden centrarse en otras tareas entregando los hilos a la gestión del sistema.
3. ¿Cómo uso los pools de hilos?
De hecho, los pools de hilos son muy sencillos de usar, como sigue
a. Establecer el máximo y el mínimo de hilos:
ThreadPool.SetMaxThreads (int WorkerThreads,int completionPortThreads) Establece el número de solicitudes para un conjunto de hilos que pueden estar activos al mismo tiempo. Todas las solicitudes mayores a este número permanecerán en cola hasta que el hilo del pool de hilos esté disponible. También puedes establecer el número mínimo de hilos.
b. Añadir tareas al grupo de hilos:
ThreadPool.QueueUserWorkItem (nuevo WaitCallback(nombre del método));
o ThreadPool.QueueUserWorkItem (nuevo WaitCallback(nombre del método), parámetro);
Por ejemplo, si un máximo de 5 hilos en el pool de hilos ejecuta un método 60 veces, el salario total durante 5 años es el siguiente:
Si no usas pooling de hilos, puede que tengas que abrir 60 hilos para ejecutar el método Run() de forma asíncrona, lo que es un desperdicio de recursos de espacio. Ahora usamos hasta 5 hilos, que pueden ejecutarse en 1 segundo, y la eficiencia y el rendimiento son muy buenos.
|