¿Qué es un objeto activo?
En programación e ingeniería de computadoras, un objeto activo es un tipo de patrón de diseño que puede usarse para ayudar a garantizar que algún servicio esté siempre disponible en un sistema multiproceso o concurrente. Un objeto activo es un objeto que implementa un mecanismo para que pueda recibir y procesar la entrada de objetos externos sin obligar a los objetos externos a esperar a que se complete la ejecución. Este mecanismo también permite que muchos objetos que puedan estar ejecutándose simultáneamente utilicen objetos activos sin la posibilidad de largos tiempos de bloqueo en los que los procesos concurrentes deben detenerse y esperar el acceso. Esto se logra con mayor frecuencia envolviendo los objetos activos en una interfaz de acceso público, llamada proxy, y luego implementando un tipo de sistema de colas dentro de los objetos para que los mensajes se almacenen para su procesamiento posterior. Esto crea un patrón de diseño en el que los objetos envían mensajes a los objetos activos y luego continúan su procesamiento hasta que el objeto activo procesa el mensaje y luego informa a los objetos que llaman de los resultados para que puedan actualizar sus estados en consecuencia.
Fuera de un patrón de diseño de objeto activo, un objeto normal podría llamarse un objeto pasivo. En un ejemplo de programa simple, un objeto pasivo podría estar actuando como un retransmisor del servidor de chat, en el que los objetos remotos contactan al objeto pasivo para transmitir un mensaje a todos los demás en el servidor. Cada vez que el objeto del servidor pasivo recibe un mensaje de chat de un objeto remoto, debe manejar la solicitud de inmediato y luego enviar la salida de inmediato, todo mientras el objeto remoto detiene su propia ejecución hasta que se complete el proceso, un efecto conocido como bloqueo. Crear diferentes subprocesos dentro del programa puede resolver el problema del bloqueo de ejecución, pero luego inicia problemas con la sincronización.
En un patrón de diseño de objeto activo, el mismo objeto de servidor en el ejemplo anterior se estaría ejecutando en su propio hilo separado de los otros objetos. También estaría envuelto en algún tipo de interfaz conocida como proxy que también se ejecuta en un hilo separado, a veces el hilo principal de ejecución del programa. Cuando un objeto remoto desea que el objeto del servidor envíe un mensaje de chat, se pone en contacto con el objeto proxy, le pasa toda la información requerida y luego vuelve a su estado de ejecución normal en lugar de esperar.
La interfaz proxy luego convierte la información del objeto remoto en un mensaje que pasa a una cola para que el objeto activo lo procese. En este punto, tanto la interfaz proxy como el objeto remoto pueden continuar ejecutándose y no están bloqueados. Mientras tanto, el objeto activo trabaja para mantener la cola vacía, procesando cada mensaje entrante. Si el objeto llamante requiere que el objeto activo devuelva alguna información, entonces se puede usar una estructura de devolución de llamada para informar al objeto remoto de cualquier cambio de estado.