Skip to main content

Cos'è un oggetto attivo?

Nella programmazione e ingegneria del computer, un oggetto attivo è un tipo di modello di progettazione che può essere utilizzato per garantire che un certo servizio sia sempre disponibile in un sistema multi-thread o concorrente.Un oggetto attivo è un oggetto che implementa un meccanismo in modo che possa ricevere ed elaborare l'input da oggetti esterni senza forzare gli oggetti esterni ad attendere il completamento dell'esecuzione.Questo meccanismo consente anche a molti oggetti che potrebbero essere tutti in esecuzione contemporaneamente a utilizzare oggetti attivi senza la possibilità di lunghi tempi di blocco in cui i processi simultanei devono fermarsi e attendere l'accesso.Questo più spesso si ottiene avvolgendo gli oggetti attivi in un'interfaccia accessibile al pubblico, chiamato proxy, e quindi implementando un tipo di sistema di coda all'interno degli oggetti in modo che i messaggi vengano archiviati per l'elaborazione successiva.Ciò crea un modello di progettazione in cui gli oggetti inviano messaggi agli oggetti attivi e quindi continuano la loro elaborazione fino a quando l'oggetto attivo non elabora il messaggio e successivamente informa gli oggetti chiamanti dei risultati in modo che possano aggiornare i loro stati di conseguenza.

al di fuori di un modello di progettazione attivo attivo, un oggetto normale potrebbe essere chiamato un oggetto passivo.In un semplice esempio di programma, un oggetto passivo potrebbe fungere da relè di chat server, in cui gli oggetti remoti contattano l'oggetto passivo per trasmettere un messaggio a tutti gli altri sul server.Ogni volta che l'oggetto del server passivo riceve un messaggio di chat da un oggetto remoto, deve gestire immediatamente la richiesta e quindi inviare immediatamente l'output, il tutto mentre l'oggetto remoto interrompe la propria esecuzione fino a quando il processo non viene eseguito, un effetto noto come blocco.La creazione di thread diversi all'interno del programma può risolvere il problema del blocco dell'esecuzione, ma quindi avvia problemi con la sincronizzazione.

In un modello di progettazione di oggetti attivo, lo stesso oggetto server nell'esempio sopra sarebbe in esecuzione nel proprio thread separato dagli altri oggetti.Sarebbe inoltre avvolto in un tipo di interfaccia noto come proxy che è anche in esecuzione in un thread separato, a volte il thread di esecuzione del programma principale.Quando un oggetto remoto desidera far inviare l'oggetto server un messaggio di chat, contatta l'oggetto proxy, passa ad esso tutte le informazioni richieste, quindi ritorna al suo normale stato di esecuzione invece di aspettare.

L'interfaccia proxy quindi converteLe informazioni dall'oggetto remoto in un messaggio che passa a una coda per il processo attivo.A questo punto, sia l'interfaccia proxy che l'oggetto remoto sono liberi di continuare l'esecuzione e non sono bloccati.Nel frattempo, l'oggetto attivo funziona per mantenere vuota la coda, elaborando ogni messaggio in arrivo.Se l'oggetto chiamante richiede che alcune informazioni vengano restituite dall'oggetto attivo, è possibile utilizzare una struttura di richiamata per informare l'oggetto remoto di eventuali modifiche allo stato.