2010-03-13 12 views
11

¿Qué hace que los actores sean tan livianos?Scala: ¿Por qué los actores son livianos?

Ni siquiera estoy seguro de cómo funcionan. ¿No son hilos separados?

+0

me gustaría añadir a esta pregunta: ¿Cómo ligera son actores Scala? – ziggystar

+0

@ziggystar Por lo que entiendo, los actores son solo tareas a nivel de objeto.Supongo que "qué tan ligero" depende principalmente del tamaño de su "buzón". – someguy

Respuesta

17

cuando dicen peso ligero que quiere decir que cada actor no está asignado a un solo hilo.

JVM ofrece compartió hilos de memoria con cerraduras como la principal forma de abstracciones de concurrencia. Pero compartidos hilos de memoria son bastante pesado e incurren en graves penalizaciones de rendimiento a los gastos generales el cambio de contexto. Para una implementación agente basado en un mapeo uno-a-uno con hilos de JVM, proceso de la carga útil por el actor Scala no será tan ligera que podemos generar un millón de casos de un actor para un cálculo específico. Por lo tanto, actores Scala han sido diseñados como objetos de eventos de peso ligero, que obtienen programadas y ejecutadas en una que subyace en la piscina subproceso de trabajo que consigue cambiar de tamaño automáticamente cuando todos los hilos bloque de larga duración operaciones. De hecho, Scala implementa un modelo unificado de actores - thread basado y basado en eventos. Los actores Scala ofrecen dos formas de suspensión mecanismos - una suspensión de marco completo (implementada como recepción) y una suspensión basada en un cierre de continuación (implementado como reaccionar). En caso de actores basados ​​en eventos, una espera en reaccionar está representada por un cierre de continuación , es decir, un cierre que captura el resto del cálculo del actor. Cuando el actor suspendido recibe un mensaje que coincide con uno de los patrones especificados en el actor, la continuación se ejecuta mediante la programación de la tarea a uno de los subprocesos de trabajo desde la piscina hilo subyacente. El paper "Actores que unifican subprocesos y Eventos" por Haller y Odersky analiza los detalles de la implementación .

Source

+0

Si se lanza una excepción, solo el actor (y no el sublativo) morirá ¿verdad? – someguy

+0

@someguy - Creo que realmente depende de la implementación del grupo de subprocesos, pero sí. – ChaosPandion

0

referencia importante Actors that Unify Threads and Events

no creo que es necesario reforzar los que el actor es que ligera.

actores en primer lugar, a base de hilo por hilo son el actor por lo que no ligera en absoluto. actores a partir

de eventos son el punto donde empezamos a sentir los actores son de peso ligero. es liviano porque no tiene espera de subprocesos de trabajo y se cambia a otro, el subproceso de trabajo simplemente pasa de un trabajo de datos a otro trabajo de datos, por lo tanto, sigue girando en los cálculos efectivos.

Cuestiones relacionadas