tengo un mecanismo bastante estándar en Java para resolver el problema:Migración de concurrencia de Java para Scala concurrencia
- Los elementos de trabajo deben ser programados para ejecutar en un momento determinado
- Cada elemento de trabajo debe entonces esperar en una condición de convertirse en verdaderos
- Los elementos de trabajo debería ser canceladas
La solución que uso es el siguiente:
- Tener un planificador de un solo subproceso para programar mis elementos de trabajo
- Tener una
ExecutorService
(que puede ser multi-hilo) - Cada elemento de trabajo programado a continuación, envía el trabajo real a la
ExecutorService
. ElFuture
devuelto se almacena en caché en un mapa. Un servicio de terminación se utiliza para eliminar el futuro de la caché cuando el trabajo esté terminado - Los productos que se pueden cancelar a través de los futuros de caché
Por supuesto, mi ejecutor tiene que ser al menos tan grande como el número de bloquear elementos de trabajo que espero tener, pero esto no es un problema en la práctica.
Así que ahora estoy codificando en Scala y utilizando el marco actor. Suponiendo que mi elemento de trabajo se puede encapsular en un evento enviado a un actor:
- ¿Qué mecanismo utilizaría para programar un elemento de trabajo para un tiempo específico?
- Si un elemento de trabajo es un evento enviado a un actor, ¿cómo puedo garantizar que el grupo de subprocesos de respaldo sea más grande que el número de elementos que se pueden bloquear al mismo tiempo
- ¿Cómo puedo causar un trabajo programado previamente? artículo que se cancelará?
¿Puede explicar qué significa "una condición que se convierte en realidad"? ¿Es este estado global? ¿Es E/S? – Apocalisp
Solo me refiero a que, como parte del trabajo, el proceso podría tener que bloquearse para que ocurra algo (como que llegue un archivo) –