Kaj je aktivni predmet?

V računalniškem programiranju in inženiringu je aktivni objekt vrsta vzorca načrtovanja, ki se lahko uporabi za zagotovitev, da je neka storitev vedno na voljo v večnitnem ali sočasnem sistemu. Aktivni objekt je objekt, ki izvaja mehanizem, tako da lahko sprejema in obdeluje vhod od zunanjih objektov, ne da bi prisilil zunanje objekte, da čakajo na dokončanje izvedbe. Ta mehanizem prav tako omogoča številnim objektom, ki se lahko izvajajo hkrati, da uporabljajo aktivne objekte brez možnosti dolgih časov blokiranja, v katerih se morajo sočasni procesi ustaviti in počakati na dostop. To se najpogosteje doseže z ovijanjem aktivnih objektov v javno dostopen vmesnik, imenovan proxy, in nato izvajanjem vrste čakalne vrste znotraj objektov, tako da se sporočila shranijo za kasnejšo obdelavo. To ustvari vzorec načrtovanja, v katerem objekti pošiljajo sporočila aktivnim objektom in nato nadaljujejo z njihovo obdelavo, dokler aktivni objekt ne obdela sporočilo in pozneje obvesti klicne objekte o rezultatih, da lahko ustrezno posodobijo svoja stanja.

Zunaj vzorca zasnove aktivnega predmeta bi lahko običajni predmet imenovali pasivni objekt. V preprostem primeru programa lahko pasivni objekt deluje kot rele strežnika za klepet, v katerem oddaljeni objekti stopijo v stik s pasivnim objektom in pošljejo sporočilo vsem ostalim v strežniku. Kadar koli pasivni strežniški objekt prejme sporočilo klepeta od oddaljenega objekta, mora takoj obdelati zahtevo in nato takoj poslati izhod, medtem ko oddaljeni objekt ustavi lastno izvajanje, dokler se postopek ne zaključi, učinek, znan kot blokiranje. Ustvarjanje različnih niti znotraj programa lahko reši problem blokiranja izvajanja, nato pa sproži težave s sinhronizacijo.

V vzorcu zasnove aktivnega objekta bi se isti objekt strežnika v zgornjem primeru izvajal v svoji niti ločeno od drugih objektov. Prav tako bi bil zavit v neko vrsto vmesnika, znanega kot proxy, ki se prav tako izvaja v ločeni niti, včasih v glavni niti izvajanja programa. Ko oddaljeni objekt želi, da objekt strežnika pošlje sporočilo klepeta, vzpostavi stik s proxy objektom, mu posreduje vse zahtevane informacije in se nato namesto čakanja vrne v normalno stanje izvajanja.

Vmesnik proxy nato pretvori informacije iz oddaljenega objekta v sporočilo, ki ga posreduje v čakalno vrsto za obdelavo aktivnega objekta. Na tej točki lahko tako vmesnik proxy kot oddaljeni objekt nadaljujeta z izvajanjem in nista blokirana. Medtem aktivni objekt deluje tako, da je čakalna vrsta prazna in obdeluje vsako dohodno sporočilo. Če klicni objekt zahteva, da aktivni objekt vrne nekaj informacij, se lahko uporabi struktura povratnega klica za obveščanje oddaljenega objekta o kakršnih koli spremembah stanja.