Što je aktivni objekt?

U računalnom programiranju i inženjeringu, aktivni objekt je vrsta uzorka dizajna koji se može koristiti kako bi se osiguralo da je neka usluga uvijek dostupna u višenitnom ili istodobnom sustavu. Aktivni objekt je objekt koji implementira mehanizam tako da može primati i obraditi ulaz od vanjskih objekata bez prisiljavanja vanjskih objekata da čekaju da se izvršenje završi. Ovaj mehanizam također omogućuje mnogim objektima koji se mogu izvoditi istovremeno da koriste aktivne objekte bez mogućnosti dugog vremena blokiranja u kojem se istodobni procesi moraju zaustaviti i čekati na pristup. To se najčešće postiže umotavanjem aktivnih objekata u javno dostupno sučelje, zvano proxy, a zatim implementiranjem vrste sustava reda čekanja unutar objekata tako da se poruke pohranjuju za kasniju obradu. Time se stvara obrazac dizajna u kojem objekti šalju poruke aktivnim objektima i zatim nastavljaju njihovu obradu sve dok aktivni objekt ne obradi poruku i kasnije obavijesti objekte koji pozivaju rezultate kako bi mogli ažurirati svoja stanja u skladu s tim.

Izvan uzorka dizajna aktivnog objekta, normalni objekt bi se mogao nazvati pasivnim objektom. U jednostavnom primjeru programa, pasivni objekt može djelovati kao relej poslužitelja za razgovor, u kojem udaljeni objekti kontaktiraju pasivni objekt kako bi prenijeli poruku svima ostalima na poslužitelju. Kad god objekt pasivnog poslužitelja primi poruku chata od udaljenog objekta, mora odmah obraditi zahtjev, a zatim odmah poslati izlaz, sve dok udaljeni objekt zaustavlja vlastito izvršenje dok se proces ne završi, što je učinak poznat kao blokiranje. Stvaranje različitih niti unutar programa može riješiti problem blokiranja izvršenja, ali onda pokreće probleme sa sinkronizacijom.

U obrascu dizajna aktivnog objekta, isti objekt poslužitelja u gornjem primjeru bi se izvodio u vlastitoj niti odvojenoj od drugih objekata. Također bi bio omotan u neku vrstu sučelja poznatog kao proxy koji također radi u zasebnoj niti, ponekad glavnoj niti za izvršavanje programa. Kada udaljeni objekt želi da objekt poslužitelja pošalje poruku chata, kontaktira proxy objekt, prosljeđuje mu sve potrebne informacije, a zatim se vraća u svoje normalno stanje izvršenja umjesto čekanja.

Proxy sučelje zatim pretvara informacije iz udaljenog objekta u poruku koju prosljeđuje u red čekanja za aktivni objekt za obradu. U ovom trenutku, i proxy sučelje i udaljeni objekt slobodni su za nastavak izvršavanja i nisu blokirani. U međuvremenu, aktivni objekt radi na održavanju reda praznim, obrađujući svaku dolaznu poruku. Ako objekt koji poziva zahtijeva da aktivni objekt vrati neke informacije, tada se struktura povratnog poziva može koristiti za informiranje udaljenog objekta o svim promjenama u stanju.