2011-11-01 23 views
6

si quiero implementar un servidor http.gc de un número mayor de scala actor

creo un nuevo actor por solicitud. Por lo tanto, puede ampliarse a medida que mi CPU se actualice.

pero ¿ocasionará problemas de uso de la memoria? se dice que el actor tiene un comportamiento extraño mientras que el gc. el código será algo así:

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


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

Editar: hice una prueba de esto, compruebe mi prueba en detalle http://jilen.iteye.com/blog/1231178

Respuesta

3

Ascensor had some problems con Scala biblioteca incorporada el actor hace un par de años, lo que los llevó a escribir su propia biblioteca de actores. No tengo idea si los actores integrados de Scala todavía tienen los mismos problemas que la comunidad de Lift experimentó en ese momento. Tendrás que hacer tus propias pruebas para averiguarlo. (O tal vez alguien con experiencia reciente puede sonar)

Recomiendo consultar la biblioteca Akka Actors. En general, creo que es una mejora en la implementación integrada de Scala. Incluso tiene una función spawn, que hace exactamente lo que estás haciendo aquí (crear un actor para procesar un solo mensaje y morir).

Editar:

Usted Listado de Código, en particular, probablemente se escapará actores, ya que no es explícitamente exit() sus actores cuando haya terminado con ellos.

Editar 2:

Resulta que en sí Scala tiene una función spawn (Gracias Stefan). No sé si se comporta mejor que los actores de Scala.

+0

tengo una prueba sobre spawn, que funciona perfecto sin pérdida de memoria. – jilen

+1

y el actor incorporado scala aún no funciona. Sufrí una OutOfMemory en mi prueba. – jilen

+0

@jilen En realidad, su OOM puede deberse a que no está llamando 'exit()' cuando haya terminado con su actor. – leedm777

Cuestiones relacionadas