Trabajo en aplicaciones financieras en Java y obtener concurrencia es dolor. Se supone que Erlang y el modelo de actores son una buena opción para aplicaciones simultáneas masivas, pero no puedo entender cómo hacerlo en Java. Sé que hay bibliotecas como Jetlang, FunctionalJava, kilim, etc., pero generalmente no van más allá de ejemplos simplistas.cómo hacer actores (erlang) en java?
Digamos que necesito procesar tres o cuatro eventos diferentes, como calcular algunos números de feeds de datos de mercado, órdenes/intercambios y 'sacar' alguna derivada de estos datos. La mayoría de las veces, estos eventos o flujos de datos deben procesarse en orden (al menos en orden con respecto a alguna clave ... por ejemplo, todas las órdenes para un símbolo específico deben procesarse en orden, pero en paralelo con con respecto a los símbolos no relacionados)
Creo un objeto Java normal con métodos que cambian el estado. En lugar de dejar que esos métodos cambien el estado directamente, pongo sus parámetros (convirtiéndolos en un objeto de comando) en una cola fifo (buzón de erlang), y un método de reacción() que procesa esa cola. De esta forma, todas las actualizaciones deben pasar por una única cola y solo se puede acceder al método reac() una actualización a la vez. En teoría, esto debería salvarme la necesidad de bloquear o sincronizar en este método.
Sin embargo, esta cola es básicamente una cola productor/consumidor, lo que significa que es una cola de bloqueo. El bloqueo es muy malo para la escalabilidad. Además, tener una única cola significa que todos mis objetos de comando de actualización (de diferentes tipos) salen de la cola con algún tipo súper genérico (como Object) y tengo que devolverlos al tipo correcto y dejar que reaccionar() los procesen .
Una vez que este objeto actorizado produce una salida, para ser consumido por otro objeto, realizo el mismo proceso. En otras palabras, he cambiado el modelo de programación de orientado a objetos, con métodos que devuelven resultados, a una especie de pesadilla de paso de continuación donde todos mis métodos se vuelven asíncronos.
¿Alguna idea de cómo puedo abordar esto?
Para su información, parece que el proyecto ya no se mantiene según el sitio web del Actor's Guild. –