2009-06-23 12 views
5

Quiero hacer una simulación de varios agentes que contenga aproximadamente 10.000 agentes (agentes de máquina y producto) utilizando el marco Scala Actor.¿El marco Actor de Scala puede manejar 10.000 actores sin problemas de pila?

Según tengo entendido, si hay muchos actores pasando mensajes, ¿puede quedarse sin pila debido a la recursión?

En caso afirmativo, ¿cómo puedo aumentar los tamaños de pila para los subprocesos de trabajo subyacentes?

Respuesta

11

El marco actor ha sido diseñado para manejar esto - de hecho, puede manejar esto con un solo hilo, suponiendo que el uso del patrón loop-react de la siguiente manera:

import actors._ 
import actors.Actor._ 

val a = actor { 
    loop { 
    react { 
     case ABC => //Handle here 

    } 
    } 
} 

En las páginas 590-593 de Programación en Scala esto se trata con más detalle: básicamente, el método react nunca retorna normalmente (termina con una excepción) y, por lo tanto, no es necesario preservar su pila de llamadas. Puedes pensar que es un looping para siempre.

+0

Gracias. Podría haber pasado por alto esa oración en el libro. ¿Y la forma de aumentar el tamaño de la pila de subprocesos de trabajo? ¿Es curioso? – akarnokd

+1

echa un vistazo a: http://lampsvn.epfl.ch/trac/scala/browser/scala/tags/R_2_7_5_final/src/actors/scala/actors/FJTaskScheduler2.scala?view=markup. Verá que puede definir propiedades del sistema como "actors.maxPoolSize", etc. –

+0

Aunque el punto es dejar que el FJTaskScheduler decida cuánta concurrencia admite su sistema (es decir, cuántos procesadores disponibles hay) –

Cuestiones relacionadas