next up previous contents
Next: Scalabilità Up: I problemi della programmazione Previous: Replicazione   Indice

Concorrenza & sincronizzazione

L'efficienza di un servizio è determinata dalla propria capacità di struttare in modo ottimale le risorse su cui si basa.

L'uso di una architettura basata su famiglie di agenti consente un ampio grado di parallelismo intrinseco (dovuto al fatto che il servizio si svolge intrinsecamente in flussi di esecuzione paralleli e simultanei).

L'utilizzo poi di agenti in grado di processare più richieste contemporaneamente consente un ampio grado di parallelismo e di sfruttamento delle risorse locali (CPU/Storage).

L'implementazione proposta prevede l'utilizzo di server paralleli multithreaded (l'Object Adapter fornito dall'ORB prevede meccanismi interni per determinare il numero ottimale di thread di esecuzione del servizio in maniera dinamica durante l'esecuzione).

Per garantire la correttezza e la sequenzialità delle operazioni sono utilizzati meccanismi di locking che serializzano l'accesso alle risorse comuni ai vari thread con la granularità del singolo oggetto. L'uso di lock di tipo Shared e Exclusive, limita poi l'accesso esclusivo alle risorse ai soli casi veramente necessarî.

Nel caso di richieste particolarmente onerose in termini di tempo (ricostruzione delle tabelle interne di un server di tipo ObjectManager), il POA è istruito affinché non accetti connessioni da parte dei clients sino a completamento dell'esecuzione.


next up previous contents
Next: Scalabilità Up: I problemi della programmazione Previous: Replicazione   Indice
Francesco Bassi 2001-02-16