Distributed computing è il campo dell’informatica che studia la progettazione e il comportamento dei sistemi che coinvolgono molti componenti liberamente accoppiati. I componenti di tali sistemi distribuiti possono essere più thread in un singolo programma, più processi su una singola macchina, o più processori collegati attraverso una memoria condivisa o una rete. I sistemi distribuiti sono insolitamente vulnerabili al nondeterminismo, dove il comportamento del sistema nel suo complesso o dei singoli componenti è difficile da prevedere. Tale imprevedibilità richiede una vasta gamma di nuove tecniche oltre a quelle usate nell’informatica tradizionale.
Come altre aree dell’informatica, l’informatica distribuita abbraccia una vasta gamma di argomenti, da quelli applicati a quelli molto teorici. Dal punto di vista teorico, l’informatica distribuita è una ricca fonte di problemi matematicamente interessanti in cui un algoritmo è contrapposto ad un avversario che rappresenta gli elementi imprevedibili del sistema. L’analisi degli algoritmi distribuiti ha spesso un forte sapore game-theoretic, perché le esecuzioni coinvolgono una complessa interazione tra il comportamento dell’algoritmo e le risposte del sistema.
Michael Fischer è uno dei ricercatori pionieri nella teoria del calcolo distribuito. Il suo lavoro sull’uso di argomenti avversari per dimostrare limiti inferiori e risultati di impossibilità ha plasmato gran parte della ricerca in quest’area. Attualmente è attivamente coinvolto nello studio dei problemi di sicurezza nei sistemi distribuiti, compresi gli strumenti crittografici e la gestione della fiducia.
La ricerca di James Aspnes enfatizza l’uso della randomizzazione per risolvere problemi fondamentali nel calcolo distribuito. Molti problemi che risultano essere difficili o impossibili da risolvere usando un algoritmo deterministico possono essere risolti se i processi possono lanciare le monete. L’analisi degli algoritmi risultanti spesso richiede l’uso di tecniche non banali della teoria della probabilità.
La ricerca sui sistemi distribuiti a Yale include lavoro sia nel supporto di linguaggi di programmazione per il calcolo distribuito, sia nell’uso di tecniche di sistemi distribuiti per supportare la programmazione parallela. Il progetto FLINT di Zhong Shao si concentra sullo sviluppo di una nuova architettura a codice mobile per supportare una migrazione efficiente di dati e programmi su piattaforme di calcolo distribuite ed eterogenee. FLINT usa un linguaggio intermedio tipizzato comune per supportare l’esecuzione sicura di codice scritto in più linguaggi di programmazione come Java, C e ML.
Il lavoro di David Gelernter sullo sviluppo del linguaggio di coordinazione Linda e dei relativi strumenti è un esempio di utilizzo di tecniche di sistema distribuito per supportare la programmazione parallela. Linda fornisce uno “spazio di tuple” virtuale attraverso il quale i processi possono comunicare senza riguardo alla posizione. Il suo attuale progetto Lifestreams similmente semplifica i compiti di gestione delle informazioni, liberando l’utente da molti dei doveri amministrativi imposti dai filesystem tradizionali. Avi Silberschatz è specializzato in tecniche di gestione delle transazioni che si riferiscono sia a sistemi di database distribuiti che a sistemi multidatabase.