Ce este un obiect activ?

În programarea și inginerie computerelor, un obiect activ este un tip de model de proiectare care poate fi utilizat pentru a vă asigura că un anumit serviciu este întotdeauna disponibil într-un sistem multi-thread sau concurent. Un obiect activ este un obiect care implementează un mecanism astfel încât să poată primi și procesa intrări de la obiecte externe fără a forța obiectele externe să aștepte finalizarea execuției. Acest mecanism permite, de asemenea, multor obiecte care ar putea rula toate simultan să folosească obiecte active fără posibilitatea unor perioade lungi de blocare în care procesele concurente trebuie să se oprească și să aștepte accesul. Acest lucru se realizează cel mai adesea prin împachetarea obiectelor active într-o interfață accesibilă public, numită proxy, și apoi implementarea unui tip de sistem de coadă în interiorul obiectelor, astfel încât mesajele să fie stocate pentru procesare ulterioară. Acest lucru creează un model de design în care obiectele trimit mesaje către obiectele active și apoi continuă procesarea lor până când obiectul activ procesează mesajul și mai târziu informează obiectele apelante despre rezultate, astfel încât acestea să își poată actualiza stările în consecință.

În afara unui model de design de obiect activ, un obiect normal poate fi numit obiect pasiv. Într-un exemplu de program simplu, un obiect pasiv ar putea acționa ca un releu de server de chat, în care obiectele de la distanță contactează obiectul pasiv pentru a transmite un mesaj tuturor celorlalți de pe server. Ori de câte ori obiectul server pasiv primește un mesaj de chat de la un obiect la distanță, acesta trebuie să gestioneze cererea imediat și apoi să trimită imediat ieșire, totul în timp ce obiectul la distanță își oprește propria execuție până când procesul este încheiat, un efect cunoscut sub numele de blocare. Crearea diferitelor fire în cadrul programului poate rezolva problema blocării execuției, dar apoi inițiază probleme de sincronizare.

Într-un model de design de obiect activ, același obiect server din exemplul de mai sus ar rula în propriul fir de execuție separat de celelalte obiecte. De asemenea, ar fi împachetat într-un tip de interfață cunoscut sub numele de proxy care rulează și într-un fir separat, uneori firul principal de execuție a programului. Când un obiect la distanță dorește ca obiectul server să trimită un mesaj de chat, contactează obiectul proxy, îi transmite toate informațiile necesare și apoi revine la starea sa normală de execuție în loc să aștepte.

Interfața proxy convertește apoi informațiile de la obiectul de la distanță într-un mesaj pe care îl trece într-o coadă pentru ca obiectul activ să fie procesat. În acest moment, atât interfața proxy, cât și obiectul la distanță sunt libere să continue execuția și nu sunt blocate. Între timp, obiectul activ lucrează pentru a menține coada goală, procesând fiecare mesaj primit. Dacă obiectul apelant necesită returnarea unor informații de către obiectul activ, atunci o structură de apel invers poate fi utilizată pentru a informa obiectul aflat la distanță despre orice modificare a stării.