DEV Community

GoyesDev
GoyesDev

Posted on

[SC] Actores en Swift

Preguntas

¿Qué es un actor en Swift Concurrency y en qué se diferencia de una clase?

  • Un actor es un tipo de dato por referencia, parecido a un class.
  • actor no puede heredar de otros tipos de datos, a excepción de NSObject.
  • actor garantiza acceso serializado a los datos que encapsula.
  • No se puede modificar directamente los datos de actor, sino que se debe hacer a través de métodos, que deben ser invocados con await.
  • Se puede leer los datos del actor de forma asíncrona, con await.

¿Qué garantía fundamental ofrece el aislamiento de actores (actor isolation)?

  • Solo una tarea puede acceder a los datos de forma simultánea.

¿Por qué no puedes mutar directamente una propiedad de un actor desde fuera de él, aunque no sea private?

  • La mutación debe pasar por el executor del actor para que este la serialice.

¿Qué es un executor y cuál es su función dentro de un actor?

  • Un executor es una especie de cola serial que gestiona el acceso al dominio de aislamiento del actor.

¿En qué se diferencia el executor de un actor de una DispatchQueue serial?

  • DispatchQueue serial bloquea el hilo, mientras que el actor es reentrante, dado que su executor puede ejecutar otras tareas cuando se encuentra con await.

¿Por qué siempre debes usar await para acceder a propiedades o métodos de un actor?

  • Puede ser que otra tarea esté modificando o leyendo una propiedad del actor, así que hay que esperar hasta poder acceder a ella.

¿Cuál es la diferencia entre leer y mutar una propiedad de un actor desde fuera?

  • Se puede leer con await pero no se puede mutar desde fuera.

¿Por qué los actores no soportan herencia y qué implica eso en la práctica?

  • La responsabilidad del actor es aislar el acceso a los datos, así que no hay que usar open, final u override.
  • En la práctica implica que hay que usar composición sobre herencia.

¿Cuál es la única excepción a la regla de no herencia en actores, y para qué sirve?

  • Un actor puede heredar de NSObject y sirve para interoperabilidad con ObjC.

¿Qué analogía usa el artículo para describir el acceso a un actor y por qué es adecuada?

  • Un actor es como un semáforo: Si de entrada está en verde, puedo pasar. Si está en rojo, debo esperar. - Esto es esencialmente lo que pasa con await.

Recitar

Sin mirar el artículo, responde con tus propias palabras:

¿Cómo serializa el acceso un actor internamente?

¿Qué error produce el compilador si intentas mutar balance directamente?

¿Qué hace un actor cuando uno de sus métodos llega a un await?


Revisión

¿En qué se parece y en qué se diferencia un actor de una clase?

¿Qué problema resuelve el actor que no resolvía NSLock automáticamente?

¿Por qué el executor de un actor sí puede ser reentrante y una DispatchQueue serial no?

Si un actor es un tipo referencia, ¿cómo garantiza igualmente la seguridad de datos?


Bibliografía

Top comments (0)