Co to jest obiekt aktywny?

W programowaniu i inżynierii komputerowej obiekt aktywny jest rodzajem wzorca projektowego, którego można użyć, aby zapewnić, że jakaś usługa jest zawsze dostępna w systemie wielowątkowym lub współbieżnym. Obiekt aktywny to obiekt, który implementuje mechanizm, dzięki czemu może odbierać i przetwarzać dane wejściowe z obiektów zewnętrznych bez zmuszania obiektów zewnętrznych do oczekiwania na zakończenie wykonania. Mechanizm ten pozwala również wielu obiektom, które mogą działać jednocześnie, na używanie obiektów aktywnych bez możliwości długich czasów blokowania, w których współbieżne procesy muszą się zatrzymać i czekać na dostęp. Najczęściej osiąga się to poprzez zawinięcie aktywnych obiektów w publicznie dostępny interfejs, zwany proxy, a następnie zaimplementowanie typu systemu kolejek wewnątrz obiektów, dzięki czemu wiadomości są przechowywane do późniejszego przetwarzania. Tworzy to wzorzec projektowy, w którym obiekty wysyłają komunikaty do obiektów aktywnych, a następnie kontynuują ich przetwarzanie, dopóki aktywny obiekt nie przetworzy komunikatu, a później informuje obiekty wywołujące o wynikach, aby mogły odpowiednio zaktualizować swoje stany.

Poza wzorcem projektowym obiektu aktywnego normalny obiekt można nazwać obiektem pasywnym. W prostym przykładzie programu obiekt pasywny może działać jako przekaźnik serwera czatu, w którym obiekty zdalne kontaktują się z obiektem pasywnym, aby przesłać wiadomość do wszystkich innych osób na serwerze. Za każdym razem, gdy pasywny obiekt serwera otrzymuje wiadomość czatu od zdalnego obiektu, musi natychmiast obsłużyć żądanie, a następnie natychmiast wysłać dane wyjściowe, podczas gdy zdalny obiekt zatrzymuje swoje własne wykonanie do czasu zakończenia procesu, efekt znany jako blokowanie. Tworzenie różnych wątków w programie może rozwiązać problem blokowania wykonywania, ale następnie inicjuje problemy z synchronizacją.

We wzorcu projektu aktywnego obiektu ten sam obiekt serwera w powyższym przykładzie działałby we własnym wątku, oddzielonym od innych obiektów. Byłby również opakowany w pewien rodzaj interfejsu znany jako proxy, który również działa w osobnym wątku, czasami głównym wątku wykonywania programu. Gdy zdalny obiekt chce, aby obiekt serwera wysłał wiadomość na czacie, kontaktuje się z obiektem proxy, przekazuje mu wszystkie wymagane informacje, a następnie powraca do normalnego stanu wykonania zamiast czekać.

Interfejs proxy konwertuje następnie informacje ze zdalnego obiektu na komunikat, który przekazuje do kolejki w celu przetworzenia przez aktywny obiekt. W tym momencie zarówno interfejs proxy, jak i obiekt zdalny mogą kontynuować wykonywanie i nie są blokowane. Tymczasem aktywny obiekt pracuje nad utrzymaniem pustej kolejki, przetwarzając każdą przychodzącą wiadomość. Jeśli obiekt wywołujący wymaga zwrócenia pewnych informacji przez obiekt aktywny, wówczas struktura wywołania zwrotnego może zostać użyta do poinformowania obiektu zdalnego o wszelkich zmianach stanu.