Según tengo entendido, los actores son básicamente hilos livianos implementados en la parte superior de los hilos, ejecutando muchos actores en un pequeño grupo de hilos compartidos.scala actors vs hilos y bloqueo IO
Dado que es el caso, el uso de operaciones de bloqueo en un actor bloquea el hilo subyacente. Este no es un problema de corrección porque la biblioteca del actor generará más hilos según sea necesario (¿es correcto?) Pero luego terminará con muchos hilos, negando el beneficio de usar actores en primer lugar.
Dado que, ¿cómo funcionan los actores cuando necesita hacer tales operaciones de E/S? ¿Hay operaciones que bloquean al actor, suspendiendo al actor y dejando que el hilo pase a otras operaciones (al igual que las operaciones de bloqueo suspenden el hilo mientras se deja que la CPU pase a otras operaciones), o todo está escrito en CPS, con cadenas actores? ¿O los actores simplemente no son aptos para este tipo de operaciones de larga duración?
Antecedentes: Tengo experiencia escribiendo cosas multiproceso de la manera clásica, y entiendo muy bien cómo funcionan los CPS/eventos, pero no tengo absolutamente ninguna experiencia trabajando con actores, y solo quiero entender, en un alto nivel, cómo encajan. , antes de sumergirme en el código.
Debe implicar en algún punto la continuación delimitada, como en http://jim-mcbeath.blogspot.com/2010/09/scala-coroutines.html. ¿O tal vez usar un flujo de mensajes sin bloqueo? (http://blog.typesafe.com/non-blocking-message-flow-with-akka-actors) – VonC
Consulte mi respuesta aquí http://stackoverflow.com/questions/1512066/is-there-any-non -blocking-io-open-source-implementation-for-scalas-actors –