¿Qué función tiene eventloop
en Scala Actors y para qué sirve?¿Qué hace la función "eventloop" en Scala Actors?
Respuesta
eventloop
funciona de manera similar a loop
y react
combinados. La diferencia entre loop
y eventloop
es que loop
, de hecho, no llama al cuerpo de forma recursiva (para evitar el desbordamiento de pila para actores basados en subprocesos), pero planifica el manejo (reacción/recepción) de un siguiente mensaje del buzón y finaliza ejecución de un controlador actual lanzando una excepción, para borrar la pila de llamadas.
eventloop
maneja de forma recursiva los mensajes utilizando react
- en caso de react
que es seguro (y la pila no recibe sobrevolados), porque el cuerpo de react
(! Pero no receive
) siempre termina con una excepción, en la mayoría de los casos, y el siguiente ciclo programado, para garantizar un acceso justo al grupo de hilos de todos los actores. Por lo tanto, eventloop
se puede usar solo con actores controlados por eventos.
import scala.actors._
import Actor._
class EventLoop extends Actor {
def act = eventloop{
case msg => println("Received " + msg)
}
}
Tal this thread puede dar algunos detalles:
Una motivación importante para los actores es que permiten que para evitar la inversión de control lo que significa que hay como máximo un hilo ejecutar dentro de un actor a la vez, y el usuario elige cuándo se trata de escribiendo un programa en línea recta que espere los mensajes en puntos explícitos en el flujo de control.
En este modelo, uno normalmente quiere evitar pasar funciones de devolución de llamada a otros hilos que las invocan de forma asincrónica; en su lugar, otros hilos deberían interactuar con un actor solo mediante el envío de mensajes. Si el comportamiento de devolución de llamada-como se quería entonces el siguiente patrón logra que de una manera thread-safe:
def eventloop() {
react {
case Event1 =>
// handle Event1
eventloop()
...
case Eventn =>
// handle Eventn
eventloop()
} }
Este patrón se proporciona como una operación de resumen en
Actor.eventloop
:
import scala.actors.Actor._
eventloop {
case Event1 =>
// handle Event1
case Eventn =>
// handle Eventn
}
Tenga en cuenta que no hay necesidad de realizar llamadas finales a algunas funciones adjuntas ción más.
Dicho esto, teniendo en cuenta las fechas de rosca de 2008, y el Scala Actor API guide no menciona eventloop
una vez, tal vez esto no se utiliza tan a menudo.
Vasil Remeniuk detalles expertos eventloop
uso en his answer (+1) y da un ejemplo concreto en la pregunta "Client-Server example with Scala actors".
- 1. Scala actors - peores prácticas?
- 2. Scala remote actors
- 3. En Scala, ¿qué hace "ver"?
- 4. scala actors: long running io operations
- 5. scala actors vs hilos y bloqueo IO
- 6. application.conf para Scala SBT Akka Actors
- 7. ¿Qué hace la función invisible()?
- 8. ¿Qué hace la función j en Rails?
- 9. ¿Qué hace la función _ ($ string) en PHP?
- 10. ¿Qué hace esta función?
- 11. Enlace variable Scala cuando se usa con Actors
- 12. ¿Qué hace la función cvWaitKey() de OpenCV?
- 13. ¿Qué hace la función de php 'sobrecarga'?
- 14. ¿Qué hace la función "_e()" de Wordpress?
- 15. ¿Qué hace la siguiente función get (1)?
- 16. ¿Qué sucede cuando utilizamos loop en lugar de while (true) con scala actors?
- 17. Usando Scala Actors para crear algo así como un Pipeline
- 18. ¿Qué función jQuery data() hace
- 19. ¿Qué hace el nuevo tipo dinámico scala?
- 20. Composing actors
- 21. ¿Qué hace Contras en esta función?
- 22. ¿Qué hace la bandera del compilador scala 'optimize'?
- 23. ¿Qué es una función literal en Scala?
- 24. Ubicación getAccuracy() ¿qué hace esta función?
- 25. ¿Qué hace esto realmente? - Crazy C++ función
- 26. función inversa en Scala
- 27. ¿Qué hace exactamente la función gc_enable de PHP?
- 28. ¿Qué hace la función de subrayado de PHP?
- 29. ¿Qué significa param: _ * en Scala?
- 30. ¿Cómo se implementa el buzón (cola de mensajes) en Scala Actors?