Mikä on aktiivinen kohde?

Tietokoneohjelmoinnissa ja -tekniikassa aktiivinen kohde on eräänlainen suunnittelumalli, jonka avulla voidaan varmistaa, että jokin palvelu on aina saatavilla monisäikeisessä tai samanaikaisessa järjestelmässä. Aktiivinen objekti on objekti, joka toteuttaa mekanismin, jotta se voi vastaanottaa ja käsitellä ulkoisten objektien syötteitä pakottamatta ulkoisia objekteja odottamaan suorituksen päättymistä. Tämä mekanismi mahdollistaa myös sen, että monet objektit, jotka voivat olla käynnissä samanaikaisesti, voivat käyttää aktiivisia objekteja ilman mahdollisuutta pitkiä estoaikoja varten, jolloin samanaikaisten prosessien on pysähdyttävä ja odotettava pääsyä. Tämä saavutetaan useimmiten käärimällä aktiiviset objektit julkisesti saatavilla olevaan käyttöliittymään, jota kutsutaan välityspalvelimeksi, ja toteuttamalla sitten jonkinlainen jonojärjestelmä objektien sisään, jotta viestit tallennetaan myöhempää käsittelyä varten. Tämä luo suunnittelumallin, jossa objektit lähettävät viestejä aktiivisille objekteille ja jatkavat niiden käsittelyä, kunnes aktiivinen objekti käsittelee viestin ja myöhemmin ilmoittaa kutsuville objekteille tuloksista, jotta ne voivat päivittää tilonsa vastaavasti.

Aktiivisen kohteen suunnittelumallin ulkopuolella normaalia objektia voidaan kutsua passiiviseksi objektiksi. Yksinkertaisessa ohjelmaesimerkissä passiiviobjekti saattaa toimia chat -palvelimen välityksenä, jossa etäobjektit ottavat yhteyttä passiiviseen objektiin lähettääkseen viestin kaikille muille palvelimella oleville. Aina kun passiivinen palvelinobjekti vastaanottaa chat -viestin etäobjektilta, sen on käsiteltävä pyyntö välittömästi ja lähetettävä sitten välittömästi tulostus, kun taas etäobjekti pysäyttää oman suorituksensa, kunnes prosessi on valmis. Eri säikeiden luominen ohjelmaan voi ratkaista suorituksen estämisen ongelman, mutta käynnistää sitten synkronointiongelmat.

Aktiivisessa objektisuunnittelumallissa sama palvelinobjekti yllä olevassa esimerkissä toimisi omassa säikeessään erillään muista objekteista. Se myös kääritty jonkinlaiseen käyttöliittymään, joka tunnetaan välityspalvelimena ja joka toimii myös erillisessä säikeessä, joskus ohjelman pääsuorituskierteenä. Kun etäobjekti haluaa palvelinobjektin lähettävän chat -viestin, se ottaa yhteyttä välityspalvelinobjektiin, välittää sille kaikki tarvittavat tiedot ja palaa sitten normaaliin suoritustilaansa odottamisen sijaan.

Välityspalvelimen käyttöliittymä muuntaa sitten etäobjektista saadut tiedot sanomaksi, jonka se välittää jonoon aktiivisen objektin käsiteltäväksi. Tässä vaiheessa sekä välityspalvelimen käyttöliittymä että etäobjekti voivat jatkaa suorittamista, eivätkä ne ole estettyjä. Samaan aikaan aktiivinen objekti pitää jonon tyhjänä ja käsittelee jokaisen saapuvan viestin. Jos aktiivinen objekti vaatii soittavan objektin palauttamaan joitakin tietoja, soittamisrakennetta voidaan käyttää ilmoittamaan etäobjektille tilan muutoksista.