2011-08-02 15 views
5

Soy nuevo en Scala y Akka y estoy considerando usarlo para resolver un problema. Supongamos que tengo un motor de cálculo (que busca una solución). Me gustaría paralelizar esa búsqueda tanto en cpus como en nodos, dando a cada cpu de cada nodo su propia instancia de motor.scala/akka/stm design for large shared state?

Las entradas del motor consisten en un pequeño número de entradas escalares y una tabla hash muy grande. Cada instancia de motor usaría sus entradas escalares para realizar un pequeño cambio local a la tabla de hash, calcular una bondad y luego descartar sus cambios (no es necesario que sean confirmados/vistos por ninguna otra instancia de motor). El valor de bondad se devolvería a algún coordinador que elegiría entre los resultados.

Estaba leyendo un poco sobre el TransactionalMap de STM como un vehículo compartido. Esto parece ideal, pero realmente no veo ningún ejemplo completo que lo use como estado compartido.

Preguntas:

  • ¿El modelo de actor/STM parece adecuada para este problema?
  • ¿Puede mostrar un ejemplo específico de cómo distribuir el estado compartido? (Es más grande Ref [TransactionalMap [,]] como un mensaje?
  • ¿Hay algo diferente acerca de la distribución del estado compartido dentro de un nodo en contraposición a través de los diferentes nodos?

mentes curiosas quieren saber,

Allan

Respuesta

1

en términos de manejo de memoria que no suena como STM sería el más adecuado aquí porque no desea que los cambios realizados en los casos en los motores de comprometerse con la copia compartida de la tabla hash compartido.

En cambio, un immutable HashMap podría ser una mejor opción. Los elementos que no cambian en el mapa pueden ser compartidos por las instancias del motor, y solo las diferencias en cada mapa toman espacio de memoria adicional.

El modelo de actor encajaría muy bien con lo que desea hacer. Configure un actor para cada instancia de motor que desee y páselo por un mensaje con los valores escalares y el hashmap. Luego haz que devuelva los resultados al coordinador.