2011-11-01 1 views
6

se voglio implementare il server http.gc di un numero maggiore di scala attore

creare un nuovo attore per richiesta. Così può scalare come la mia cpu aggiornata.

ma causerà problemi di utilizzo della memoria? si dice che l'attore abbia un comportamento strano mentre gc. il codice sarà in qualche modo simile:

class Worker extends Actor { 
    def act = react { 
     case req : Request => perform(req);exit() 
    } 
} 


class HttpEventHandler{ 
    def onConnect(conn) = { 
     new Worker ! createRequest(conn) 
    }  
} 

Edit: ho fatto un test su questo, controllare la mia prova in dettaglio http://jilen.iteye.com/blog/1231178

risposta

3

Ascensore had some problems con la Scala libreria integrata attore un paio di anni fa, che li ha spinti a scrivere la propria libreria di attori. Non ho idea se gli attori incorporati di Scala abbiano ancora gli stessi problemi vissuti dalla comunità degli Ascensori. Dovrai fare i tuoi test per scoprirlo. (O forse qualcuno con esperienza recente può intervenire).

Si consiglia di verificare la libreria Akka Actors. Nel complesso, penso che sia un miglioramento dell'implementazione integrata di Scala. Ha anche una funzione spawn, che fa esattamente quello che stai facendo qui (creando un attore per elaborare un singolo messaggio e morire).

Edit:

È listato di codice, in particolare, sarà probabilmente perdere attori, dal momento che non esplicitamente exit() tuoi attori quando hai finito con loro.

Edit 2:

Risulta che Scala stessa ha una funzione di spawn (Grazie Stefan). Non so se si comporta meglio degli attori di Scala.

+0

Ho un test su spawn, che funziona perfettamente con perdite di memoria. – jilen

+1

e l'attore incorporato scala non funziona ancora. Ho subito un OutOfMemory nel mio test. – jilen

+0

@jilen In realtà, la tua OOM potrebbe essere perché non stai chiamando 'exit()' quando hai finito con il tuo attore. – leedm777