La programación distribuida es una forma de programación paralela o computación paralela. La programación paralela involucra computadoras y unidades de computación dentro de computadoras que trabajan simultáneamente en un problema particular, como predecir el clima del mañana. Las unidades de computación pueden estar ubicadas y coordinadas muy cerca o pueden ubicarse separadas. Cuando las unidades de computación están separadas, se llama programación distribuida. En tal escenario, muy a menudo las unidades informáticas difieren entre sí, y el sistema operativo y la configuración de la red también difieren, lo que hace que la programación de la actividad informática sea particularmente desafiante.
Al resolver un problema de manera distribuida, el programa debe dividirse para que partes del programa puedan ejecutarse en las diferentes unidades informáticas; estas partes a menudo se denominan «procesos». Los procesos se ejecutan simultáneamente, pero deben comunicarse entre sí las entradas y los resultados. Si los procesos se ejecutan en hardware diferente, como una parte que se ejecuta en Intel y otra que se ejecuta en SUN, los programas deben compilarse y optimizarse de manera diferente.
Una forma de resolver un problema suficientemente difícil es dividir las partes de entrada y hacer que las diferentes unidades informáticas trabajen en las diferentes partes utilizando el mismo algoritmo, el conjunto de reglas o pasos para la resolución de problemas. Por ejemplo, para descifrar un genoma de 10,000 pares, los primeros 1,000 pares podrían asignarse a la primera unidad informática, los segundos 1,000 pares asignados a la segunda unidad informática y así sucesivamente, todos usando el mismo algoritmo. Con la programación distribuida, una ventaja es que las diferentes unidades informáticas pueden ejecutar diferentes algoritmos para resolver el mismo problema, lo que conduce a una solución significativamente mejor. Esto es similar a resolver un rompecabezas en el que algunas personas juntan el borde mientras otras juntan piezas de un color en particular.
La coordinación de los procesos de computación distribuida puede ser una tarea particularmente difícil. Algunas unidades informáticas pueden fallar o interrumpirse para realizar otros trabajos. Los mensajes que contienen las entradas o los resultados del cálculo pueden no llegar a su destino. Si los programas están escritos de manera ingenua, entonces la pérdida de una unidad informática o algunos mensajes puede hacer que todo el conjunto de computadoras se cuelgue.
En la programación distribuida, un proceso podría ser el proceso de control, esencialmente logrando que los otros procesos realicen el trabajo, o todos los procesos podrían funcionar de manera peer-to-peer sin que ningún proceso sea el «maestro». Algunos ejemplos de problemas que se han intentado con la programación distribuida incluyen el análisis de datos geológicos en busca de recursos como el petróleo, el modelado de proteínas y moléculas biológicas, el descifrado de mensajes codificados y simulaciones militares. El proyecto SETI para buscar vida extraterrestre inteligente a partir de los mensajes de radio recibidos por la Tierra es quizás uno de los ejemplos más conocidos.