Io lavoro su applicazioni finanziarie in Java e ottenere la concorrenza giusta è il dolore. Erlang e il modello degli attori dovrebbero essere adatti per applicazioni massicciamente concorrenti, ma non riesco a capire come farlo in Java. So che esistono librerie come Jetlang, FunctionalJava, kilim, ecc., Ma di solito non vanno oltre gli esempi semplicistici.come fare gli attori (erlang) in java?
Dire che ho bisogno di elaborare tre o quattro eventi diversi, come il calcolo di un numero da feed di dati di mercato, ordini/trade feed e 'uscita' di alcuni derivati di questi dati. La maggior parte delle volte, questi eventi o flussi di dati devono essere elaborati in ordine (almeno nell'ordine rispetto ad alcuni tasti ... ad esempio, tutti gli ordini per un simbolo specifico devono essere elaborati in ordine, ma in parallelo con rispetto a simboli non correlati)
Creo un normale oggetto Java con metodi che mutano stato. Invece di lasciare che questi metodi cambino direttamente stato, inserisco i loro parametri (convertendoli in un oggetto comando) in una coda fifo (la casella di posta di erlang) e un metodo react() che elabora quella coda. In questo modo, tutti gli aggiornamenti devono passare attraverso una singola coda e al metodo react() è possibile accedere solo un aggiornamento alla volta. In teoria questo dovrebbe salvarmi la necessità di bloccare o sincronizzare questo metodo.
Tuttavia, questa coda è fondamentalmente una coda produttore/consumatore, il che significa che è una coda di blocco. Il blocco è molto negativo per la scalabilità. Inoltre, avere una singola coda significa che tutti i miei oggetti comando di aggiornamento (di tipi diversi) escono dalla coda con un tipo super troppo generico (come Object) e devo ricondurli al tipo giusto e lasciare che react() li elabori .
Una volta che questo oggetto attualizzato produce un'uscita, per essere consumata da un altro di questi oggetti, eseguo lo stesso processo. In altre parole, ho cambiato il modello di programmazione da object oriented, con metodi che restituiscono risultati, in una sorta di incubo che passa continuamente, dove tutti i miei metodi diventano asincroni.
Qualche idea su come posso affrontare questo?
FYI, come per il sito Web della Gilda degli attori, sembra che il progetto non sia più mantenuto. –