La programación distribuida es un paradigma de programación enfocado en desarrollar sistemas distribuidos, abiertos, escalables, transparentes y tolerantes a fallos. Este paradigma es el resultado natural del uso de las computadoras y las redes.
Casi cualquier lenguaje de programación que tenga acceso al máximo al hardware del sistema puede manejar la programación distribuida, considerando una buena cantidad de tiempo y código.
La programación distribuida típicamente cae en alguna de las varias arquitecturas básicas o arquitecturas: cliente-servidor, 3-tier, n-tier, objetos distribuidos, entre otras además de ser base para la pragmatisidad. Los lenguajes específicamente diseñados para programación distribuida son: Ada, Alef, E, Erlang, Limbo y Oz.
Multicomputadoras
Características generales y tipos
- Son un tipo especial de sistemas con múltiples procesadores. Las características que les distinguen son:
- La memoria es privada (es decir, cada procesador tiene un mapa de direcciones propio que no es accesible directamente a los demás).
- La comunicación entre procesadores es por paso de mensajes a través de una red de interconexión.
- En un multicomputadora, cada nodo es una computadora clásica.
- Los nodos colaboran para resolver juntos un mismo problema (ejecutar la misma aplicación).
- La compartición de datos es explícita, ya que el acceso a datos comunes es por paso de mensajes.
Multicomputadoras con base en buses
Cada CPU tiene conexión directa con su propia memoria local. El único problema restante es la forma en que los CPU se comunicarán entre sí. Es claro que aquí también se necesita cierto esquema de interconexión, pero como sólo es para la comunicación entre un CPU y otro, el volumen del tráfico será de varios órdenes menores en relación con el uso de una red de interconexión para el tráfico CPU-memoria.
Multicomputadoras con conmutador
Se han propuesto y construido varias redes de interconexión, pero todas tienen la propiedad de que cada CPU tiene acceso directo y exclusivo a su propia memoria particular. Hay dos topologías populares, una retícula y un hipercubo. Las retículas se basan en las tarjetas de circuitos impresos. Se adecuan mejor a los problemas con naturaleza bidimensional inherente, como la teoría de gráficas o la visión. Un hipercubo es un cubo n-dimensional. Se puede pensar como dos cubos ordinarios, cada uno de los cuales cuenta con 8 vértices y 12 aristas. Cada vértice es un CPU. Cada arista es una conexión entre dos CPU. Se conectan los vértices correspondientes de cada uno de los cubos.