Tengo un computing map (con) que estoy utilizando para almacenar en caché los resultados de un cálculo costoso.Mapa informático: cálculo de valor por adelantado
Ahora tengo una situación en la que sé que es probable que se busque una clave en particular en los próximos segundos. Esa clave también es más costosa de computar que la mayoría.
Me gustaría calcular el valor por adelantado, en un subproceso de prioridad mínima, de modo que cuando el valor sea finalmente solicitado, ya estará en la memoria caché, mejorando el tiempo de respuesta.
¿Qué es una buena manera de hacer esto de tal manera que:
- tengo control sobre el hilo (en concreto su prioridad) en el que se realiza el cálculo.
- Se evita el trabajo duplicado, es decir, el cálculo solo se realiza una vez. Si la tarea de cálculo ya se está ejecutando, el hilo llamante espera esa tarea en lugar de calcular el valor nuevamente (
FutureTask
implementa esto. Con los mapas informáticos de Guava esto es cierto si solo llama alget
pero no si lo mezcla con llamadas alput
). - El método "calcular el valor por adelantado" es asíncrono e idempotente. Si un cálculo ya está en curso, debe regresar inmediatamente sin esperar a que termine el cálculo.
- Evite la inversión de prioridad, p. si un subproceso de alta prioridad solicita el valor mientras que un subproceso de prioridad media está haciendo algo que no está relacionado pero la tarea de cómputo está en cola en un subproceso de baja prioridad, el subproceso de alta prioridad no debe faltar. Quizás esto podría lograrse aumentando temporalmente la prioridad de los hilos informáticos y/o ejecutando el cálculo en el hilo de llamada.
¿Cómo podría coordinarse esto entre todos los hilos implicados?
Otros detalles
Los cálculos en mi solicitud son operaciones de filtrado de imágenes, lo que significa que están limitados por CPU. Estas operaciones incluyen transformaciones afines (que oscilan entre 50 μs y 1 ms) y convoluciones (hasta 10 ms). Por supuesto, la efectividad de las distintas prioridades de subprocesos depende de la capacidad del sistema operativo para adelantarse a las tareas más grandes.
¿Desea precomputar y almacenar en caché una clave del caché de precomputación? ¿Puedes, um ... almacenarlo en el caché de precomputación? –
@BlueRaja, que cumple los requisitos # 1 pero no # 2, # 3 o # 4. – finnw