Kas yra aktyvus objektas?

Kompiuterių programavimo ir inžinerijos srityje aktyvus objektas yra tam tikro tipo dizaino šablonas, kuris gali būti naudojamas siekiant užtikrinti, kad kai kurios paslaugos visada būtų prieinamos kelių gijų arba lygiagrečioje sistemoje. Aktyvus objektas yra objektas, įgyvendinantis mechanizmą, kad galėtų priimti ir apdoroti įvestį iš išorinių objektų, nepriversdamas išorinių objektų laukti, kol bus baigtas vykdymas. Šis mechanizmas taip pat leidžia daugeliui objektų, kurie visi gali veikti vienu metu, naudoti aktyvius objektus be galimybės ilgai blokuoti, kai tuo pačiu metu vykstantys procesai turi sustoti ir laukti prieigos. Tai dažniausiai pasiekiama įtraukiant aktyvius objektus į viešai prieinamą sąsają, vadinamą tarpiniu serveriu, o tada objektuose įdiegiant eilių sistemą, kad pranešimai būtų saugomi vėlesniam apdorojimui. Tai sukuria dizaino modelį, pagal kurį objektai siunčia pranešimus aktyviems objektams ir tęsia apdorojimą, kol aktyvus objektas apdoros pranešimą, o vėliau praneša iškviečiantiems objektams rezultatus, kad jie galėtų atitinkamai atnaujinti savo būsenas.

Už aktyvaus objekto projektavimo modelio įprastas objektas gali būti vadinamas pasyviu objektu. Paprastame programos pavyzdyje pasyvus objektas gali veikti kaip pokalbių serverio relė, kurioje nuotoliniai objektai susisiekia su pasyviuoju objektu, kad perduotų pranešimą visiems kitiems serveryje. Kai pasyvus serverio objektas gauna pokalbio pranešimą iš nuotolinio objekto, jis turi nedelsdamas apdoroti užklausą ir nedelsdamas išsiųsti išvestį, o nuotolinis objektas sustabdo savo vykdymą, kol bus baigtas procesas. Šis efektas vadinamas blokavimu. Skirtingų gijų kūrimas programoje gali išspręsti vykdymo blokavimo problemą, tačiau tada kyla problemų su sinchronizavimu.

Aktyviame objekto projektavimo šablone tas pats serverio objektas anksčiau pateiktame pavyzdyje būtų paleistas savo gijoje atskirai nuo kitų objektų. Jis taip pat būtų įtrauktas į tam tikro tipo sąsają, vadinamą tarpiniu serveriu, kuri taip pat veikia atskiroje gijoje, kartais pagrindinėje programos vykdymo gijoje. Kai nuotolinis objektas nori, kad serverio objektas išsiųstų pokalbio pranešimą, jis susisiekia su tarpinio serverio objektu, perduoda jam visą reikalingą informaciją ir grįžta į įprastą vykdymo būseną, o ne laukė.

Tada tarpinio serverio sąsaja paverčia informaciją iš nuotolinio objekto į pranešimą, kurį jis perduoda į eilę, kad aktyvus objektas būtų apdorotas. Šiuo metu tiek tarpinio serverio sąsaja, tiek nuotolinis objektas gali tęsti vykdymą ir nėra užblokuoti. Tuo tarpu aktyvus objektas dirba, kad eilė liktų tuščia, apdorodamas kiekvieną gaunamą pranešimą. Jei iškviečiančiam objektui reikia, kad aktyvus objektas pateiktų tam tikrą informaciją, tada atgalinio skambučio struktūra gali būti naudojama informuoti nuotolinį objektą apie bet kokius būsenos pokyčius.