DEV Community

GoyesDev
GoyesDev

Posted on

[SC] Actores globales

Preguntas

¿En qué se diferencia un actor global de un actor regular?

Un actor regular serializa el acceso a los datos que tiene encapsulados. Un actor global, permite definir valores, tipos de datos o métodos, fuera del scope del actor para que sea ejecutados con su executor.

¿A qué se parece un actor global conceptualmente, y en qué se diferencia de ese concepto?

Un actor global se parece a un singleton. Sin embargo, la diferencia radica en el uso: realmente no se "usa" el actor, sino que se "anotan" propiedades, funciones y tipos de datos para que se ejecuten dentro del executor del actor.

¿A qué elementos del código se puede aplicar un actor global?

  • Valores, tipos de datos (e.g. clase), funciones.

¿Por qué el estado global es peligroso en programas concurrentes y cómo lo resuelven los actores globales?

  • Una tarea puede estar escribiendo en el estado global, mientras que otra puede estar leyendo. Esto provoca una carrera de datos.
  • Un actor global sería como marcar esa información (valor, tipo de dato, función) con un cartel que dice "acceso solo serializado".

¿Qué atributo se usa para definir un actor global personalizado y qué protocolo debe conformar?

Un actor global personalizado se define con @globalActor, debe conformar el protocolo GlobalActor y esto se logra definiendo la propiedad shared.

¿Qué propiedad es obligatoria para conformar al protocolo GlobalActor?

Se debe definir shared.

¿Qué problema introduce no tener un inicializador privado en un actor global?

Podría existir otro actor con un executor diferente, cuando el objetivo del actor global es poder tener un solo executor.

¿Por qué se recomienda usar private init() en un actor global y qué previene?

El objetivo es impedir que se cree otra instancia del actor global.

¿Cómo se usa un actor global personalizado una vez definido?

Supongamos que se marca con @globalActor al actor llamado ActorType. Luego, se puede marcar con @ActorType una variable global, un método o un tipo de dato.

¿En qué se parece al uso de @MainActor?

@MainActor es un actor global que serializa el acceso al executor de la interfaz gráfica.

¿Qué ventaja tiene aislar todo el procesamiento de imágenes bajo un mismo actor global?

Quiero que todo lo relacionado con el procesamiento de imágenes pase de forma serial: solo quiero procesar una imagen a la vez.


Recitar

Sin mirar el texto, responde:

¿Qué tres tipos de elementos del código puede anotar un actor global?

¿Qué pasa si alguien llama ImageProcessing() directamente sin el inicializador privado?

¿Por qué @MainActor es considerado un actor global?


Revisión

¿Cuál es la diferencia entre un actor regular y uno global en cuanto a su alcance?

¿Qué garantía en tiempo de compilación ofrece un actor global?

¿Qué requisito mínimo debe cumplir un tipo para conformar a GlobalActor?

¿Qué consecuencia tendría tener dos instancias del actor ImageProcessing en ejecución?


Bibliografía

Top comments (0)