Mis on aktiivne objekt?

Arvutiprogrammeerimises ja inseneritöös on aktiivne objekt teatud tüüpi kujundusmuster, mida saab kasutada tagamaks, et mõni teenus on mitmelõimelises või samaaegses süsteemis alati saadaval. Aktiivne objekt on objekt, mis rakendab mehhanismi, nii et see saab vastu võtta ja töödelda väliste objektide sisendit, ilma et see sunniks väliseid objekte täitmise lõpetamist ootama. See mehhanism võimaldab ka paljudel objektidel, mis võivad kõik samaaegselt töötada, kasutada aktiivseid objekte ilma võimaluseta pikkadeks blokeerimisaegadeks, mille jooksul samaaegsed protsessid peavad peatuma ja ootama juurdepääsu. See saavutatakse kõige sagedamini aktiivsete objektide mähkimisega avalikult juurdepääsetavasse liidesesse, mida nimetatakse puhverserveriks, ja seejärel rakendades objektide sees teatud tüüpi järjekorrasüsteemi, nii et sõnumid salvestatakse hilisemaks töötlemiseks. See loob kujundusmustri, milles objektid saadavad sõnumeid aktiivsetele objektidele ja jätkavad seejärel nende töötlemist, kuni aktiivne objekt sõnumit töötleb, ja teavitab hiljem kutsuvaid objekte tulemustest, et nad saaksid oma olekuid vastavalt värskendada.

Väljaspool aktiivset objektikujundusmustrit võib tavalist objekti nimetada passiivseks objektiks. Lihtsa programmi näites võib passiivne objekt toimida vestlusserveri releena, kus kaugobjektid võtavad passiivse objektiga ühendust, et edastada sõnum kõigile teistele serveris viibijatele. Iga kord, kui passiivne serveriobjekt saab kaugobjektilt vestlussõnumi, peab see päringu koheselt käsitlema ja seejärel viivitamatult saatma väljundi, samal ajal kui kaugobjekt peatab enda täitmise, kuni protsess on lõppenud. Seda efekti nimetatakse blokeerimiseks. Erinevate lõimede loomine programmi sees võib lahendada täitmise blokeerimise probleemi, kuid käivitab seejärel probleeme sünkroonimisega.

Aktiivse objektikujundusmustri korral töötaks ülaltoodud näites sama serveriobjekt teistest objektidest eraldi oma lõimes. Samuti oleks see mähitud teatud tüüpi liidesesse, mida tuntakse puhverserverina, mis töötab ka eraldi lõimes, mõnikord peamises programmi täitmislõimes. Kui kaugobjekt soovib, et serveriobjekt saadaks vestlussõnumi, võtab see puhverserveri objektiga ühendust, edastab sellele kogu vajaliku teabe ja naaseb seejärel ootamise asemel tavapärasesse täitmisolekusse.

Puhverserveri liides teisendab seejärel kaugobjektilt saadud teabe sõnumiks, mille see edastab aktiivse objekti töötlemiseks järjekorda. Sel hetkel saavad nii puhverserveri liides kui ka kaugobjekt täitmist jätkata ja neid ei blokeerita. Samal ajal töötab aktiivne objekt järjekorra tühjana hoidmiseks, töödeldes iga sissetulevat sõnumit. Kui kutsuv objekt nõuab, et aktiivne objekt tagastaks teatud teabe, saab tagasihelistamisstruktuuri kasutada kaugobjekti teavitamiseks oleku muutustest.