Was ist ein aktives Objekt?
In der Computerprogrammierung und -entwicklung ist ein aktives Objekt eine Art Entwurfsmuster, mit dessen Hilfe sichergestellt werden kann, dass ein bestimmter Dienst in einem System mit mehreren Threads oder gleichzeitig ausgeführtem System immer verfügbar ist. Ein aktives Objekt ist ein Objekt, das einen Mechanismus implementiert, sodass es Eingaben von externen Objekten empfangen und verarbeiten kann, ohne die externen Objekte zu zwingen, auf den Abschluss der Ausführung zu warten. Durch diesen Mechanismus können auch viele Objekte, die möglicherweise alle gleichzeitig ausgeführt werden, aktive Objekte verwenden, ohne dass lange Blockierungszeiten auftreten, in denen die gleichzeitigen Prozesse angehalten werden müssen und auf den Zugriff warten müssen. Dies wird meistens dadurch erreicht, dass die aktiven Objekte in eine öffentlich zugängliche Schnittstelle, einen so genannten Proxy, eingebunden werden und anschließend eine Art Warteschlangensystem in den Objekten implementiert wird, damit die Nachrichten für die spätere Verarbeitung gespeichert werden. Dadurch wird ein Entwurfsmuster erstellt, in dem Objekte Nachrichten an aktive Objekte senden und ihre Verarbeitung fortsetzen, bis das aktive Objekt die Nachricht verarbeitet und die aufrufenden Objekte später über die Ergebnisse informiert, damit sie ihre Zustände entsprechend aktualisieren können.
Außerhalb eines aktiven Objektentwurfsmusters kann ein normales Objekt als passives Objekt bezeichnet werden. In einem einfachen Programmbeispiel kann ein passives Objekt als Chat-Server-Relay fungieren, bei dem entfernte Objekte das passive Objekt kontaktieren, um eine Nachricht an alle anderen Benutzer auf dem Server zu senden. Wenn das passive Serverobjekt eine Chat-Nachricht von einem Remote-Objekt empfängt, muss es die Anforderung sofort verarbeiten und anschließend sofort eine Ausgabe senden, während das Remote-Objekt seine eigene Ausführung anhält, bis der Vorgang abgeschlossen ist. Dieser Effekt wird als Blockieren bezeichnet. Das Erstellen verschiedener Threads innerhalb des Programms kann das Problem der Ausführungsblockierung lösen, löst dann jedoch Probleme mit der Synchronisierung aus.
In einem aktiven Objektentwurfsmuster wird dasselbe Serverobjekt im obigen Beispiel in einem eigenen Thread ausgeführt, der von den anderen Objekten getrennt ist. Es wird auch in eine Art Schnittstelle eingebunden, die als Proxy bezeichnet wird und auch in einem separaten Thread ausgeführt wird, manchmal dem Hauptprogramm-Ausführungsthread. Wenn ein Remote-Objekt möchte, dass das Server-Objekt eine Chat-Nachricht sendet, kontaktiert es das Proxy-Objekt, übergibt ihm alle erforderlichen Informationen und kehrt dann zu seinem normalen Ausführungsstatus zurück, anstatt zu warten.
Die Proxy-Schnittstelle konvertiert dann die Informationen aus dem Remote-Objekt in eine Nachricht, die an eine Warteschlange übergeben wird, damit das aktive Objekt sie verarbeiten kann. Zu diesem Zeitpunkt können sowohl die Proxy-Schnittstelle als auch das Remote-Objekt weiterhin ausgeführt werden und sind nicht blockiert. Währenddessen hält das aktive Objekt die Warteschlange leer und verarbeitet jede eingehende Nachricht. Wenn das aufrufende Objekt die Rückgabe einiger Informationen durch das aktive Objekt erfordert, kann eine Rückrufstruktur verwendet werden, um das entfernte Objekt über Statusänderungen zu informieren.