0% encontró este documento útil (0 votos)
3 vistas16 páginas

Pool Thread

El documento describe la programación concurrente mediante el uso de pools de threads, que permiten reutilizar hilos para mejorar el rendimiento y reducir latencias en la creación y destrucción de hilos. Se presenta la interfaz java.util.concurrent.Executor y sus implementaciones, como ExecutorService, que gestionan la ejecución de tareas y permiten controlar el número de hilos concurrentes. Además, se discuten las estrategias para determinar el tamaño óptimo del pool de threads según el tipo de tareas y el hardware disponible.
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
3 vistas16 páginas

Pool Thread

El documento describe la programación concurrente mediante el uso de pools de threads, que permiten reutilizar hilos para mejorar el rendimiento y reducir latencias en la creación y destrucción de hilos. Se presenta la interfaz java.util.concurrent.Executor y sus implementaciones, como ExecutorService, que gestionan la ejecución de tareas y permiten controlar el número de hilos concurrentes. Además, se discuten las estrategias para determinar el tamaño óptimo del pool de threads según el tipo de tareas y el hardware disponible.
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Programación Concurrente

Pool Thread

Versión 2.5
Crear threads es una operación más o menos
costosa con lo que reutilizándolos se aprovecha
mejor los recursos del sistema y en un número
grande de tareas a ejecutar la mejora en el
rendimiento quizá se note.
Desventajas: Thread
- Crear y destruir hilos tiene latencias
- Creación y control son responsabilidad del
programador
- El programador debe pensar en hilos en lugar de
concentrarse en las tareas
- Determinadas aplicaciones crean hilos de forma
masiva (web server) para las cuales el modelo de
threads es ineficiente
Pool Thread
- Es una reserva de hilos a la espera de recibir tareas
para ejecutarlas
- Sólo se crea una vez (reduce latencias)
- Reutiliza los hilos una y otra vez
- Efectúa de forma autómatica la gestión del ciclo de
vida de las tareas
- Recibe las tareas a ejecutar mediante objetos
Runnable
Crear un pool con un número fijo y limitado
de threads evita que el sistema se sature o
por el contrario esté infrautilizado,
configurando el tamaño
del pool de threads según las características
del sistema que las ejecutará y del tipo de
recursos que más utiliza las tareas se obtiene
el mejor rendimiento posible.
La interfaz [Link]
La ventaja de Executor sobre Thread, es una interfaz con múltiples
implementaciones que permiten controlar la ejecución del thread.

La variedad la aportan los objetos ExecutorService que se crean con la


fábrica (factory) de Executors.

Uno de los usos más habituales es limitar el número de threads


concurrentes, de forma que si el programa quiere lanzar más threads,
los nuevos se guardan en una cola hasta que termine uno de los
threads en ejecución.
La interfaz [Link]
import [Link];

public interface Executor{


public void execute (Runnable tarea);
}
Terminación ordenada. No se aceptan nuevos
void shutdown() threads, pero se espera a que terminen los que están
pendientes.
List<Runnable> Terminación forzada. Intenta parar los threads en
shutdownNow() ejecución, y devuelve los que quedan pendientes.
La interfaz [Link]
Son gestores de threads. Eso quiere decir que disponen de varios
objetos de tipo Thread que van utilizando “sabiamente” para ejecutar
las diferentes tareas que se le pasen para ejecutar.
La interfaz [Link]
Terminación ordenada. No se aceptan nuevos
void shutdown() threads, pero se espera a que terminen los que están
pendientes.
List<Runnable> Terminación forzada. Intenta parar los threads en
shutdownNow() ejecución, y devuelve los que quedan pendientes.
La clase Executors
Proporciona fábricas (factories) para generar diferentes tipos de
ExecutorService.
static ExecutorService Se crean nuevos threads según se necesitan; pero si un
newCachedThreadPool() thread termina, se recicla antes que crear uno nuevo.
static ExecutorService
Se utiliza hasta un máximo número de threads. Si hay más
newFixedThreadPool(int
solicitudes que threads, esperan a que termine alguno.
maximo)
static ExecutorService Utiliza un (1) thread. Si hay varias solicitudes, esperan a que
newSingleThreadExecutor() termine.
static
ScheduledExecutorService Se utiliza hasta un máximo número de threads. Si hay más
newScheduledThreadPool(int solicitudes que threads, esperan a que termine alguno.
maximo)
static
ScheduledExecutorService Utiliza un (1) thread. Si hay varias solicitudes, esperan a que
newSingleThreadScheduledExe termine.
cutor()
ExecutorService
La clase ExecutorService permite crear un pool de threads con un número
fijo de ellos, el pool reutilizará cada thread para ir ejecutando las tareas.
Runtime
Con el método
public int availableProcessors()
[Link]()

se obtiene el número de núcleos lógicos del ordenador de los


modernos procesadores que utilizan Hyper Threading tanto los de Intel
como AMD.

• si las tareas hacen un uso muy intensivo de CPU y poco de


entrada/salida el tamaño del pool de threads óptimo será cercano al
número de núcleos del procesador.
• si las tareas hacen un uso intensivo de entrada/salida el tamaño
del pool de threads óptimo será mayor ya que estarán la mayor
parte del tiempo esperando a que finalicen las lentas operaciones
de entrada y salida comparadas con la CPU.

También podría gustarte