La computación distribuida es el campo de las ciencias de la computación que estudia el diseño y el comportamiento de los sistemas que involucran muchos componentes débilmente acoplados. Los componentes de tales sistemas distribuidos pueden ser múltiples hilos en un solo programa, múltiples procesos en una sola máquina, o múltiples procesadores conectados a través de una memoria compartida o una red. Los sistemas distribuidos son excepcionalmente vulnerables al no determinismo, donde el comportamiento del sistema en su conjunto o de los componentes individuales es difícil de predecir. Esta imprevisibilidad requiere una amplia gama de nuevas técnicas que van más allá de las utilizadas en la informática tradicional.
Al igual que otras áreas de la informática, la computación distribuida abarca una amplia gama de temas, desde los aplicados hasta los muy teóricos. En cuanto a la teoría, la computación distribuida es una rica fuente de problemas matemáticamente interesantes en los que un algoritmo se enfrenta a un adversario que representa los elementos imprevisibles del sistema. El análisis de los algoritmos distribuidos suele tener un fuerte sabor a teoría de juegos, porque las ejecuciones implican una compleja interacción entre el comportamiento del algoritmo y las respuestas del sistema.
Michael Fischer es uno de los investigadores pioneros en la teoría de la computación distribuida. Su trabajo sobre el uso de argumentos de adversarios para demostrar límites inferiores y resultados de imposibilidad ha dado forma a gran parte de la investigación en el área. Actualmente participa activamente en el estudio de los problemas de seguridad en los sistemas distribuidos, incluyendo las herramientas criptográficas y la gestión de la confianza.
La investigación de James Aspnes hace hincapié en el uso de la aleatoriedad para resolver problemas fundamentales en la computación distribuida. Muchos problemas que resultan difíciles o imposibles de resolver mediante un algoritmo determinista pueden resolverse si los procesos pueden lanzar monedas. El análisis de los algoritmos resultantes suele requerir el uso de técnicas no triviales de la teoría de la probabilidad.
La investigación en sistemas distribuidos en Yale incluye trabajos tanto en el soporte de lenguajes de programación para la computación distribuida, como en el uso de técnicas de sistemas distribuidos para soportar la programación paralela. Este trabajo está diseñado para liberar a los diseñadores de sistemas distribuidos de parte de la carga de comprensión de los sistemas distribuidos complejos, dejando que el compilador o las bibliotecas de tiempo de ejecución se encarguen de las cuestiones de programación y comunicación.
El proyecto FLINT de Zhong Shao se centra en el desarrollo de una nueva arquitectura de código móvil para apoyar la migración eficiente de datos y programas en plataformas informáticas distribuidas y heterogéneas. FLINT utiliza un lenguaje intermedio tipado común para soportar la ejecución segura de código escrito en múltiples lenguajes de programación como Java, C y ML.
El trabajo de David Gelernter en el desarrollo del lenguaje de coordinación Linda y las herramientas relacionadas es un ejemplo de uso de técnicas de sistemas distribuidos para soportar la programación paralela. Linda proporciona un «espacio de tuplas» virtual a través del cual los procesos pueden comunicarse sin tener en cuenta su ubicación. Su actual proyecto Lifestreams simplifica igualmente las tareas de gestión de la información, liberando al usuario de muchas de las tareas administrativas impuestas por los sistemas de archivos tradicionales. Avi Silberschatz está especializado en técnicas de gestión de transacciones relacionadas con los sistemas de bases de datos distribuidas y los sistemas de bases de datos múltiples.