Programowanie rozproszone jest jedną z form programowania równoległego lub obliczeń równoległych. Programowanie równoległe obejmuje komputery i jednostki obliczeniowe w komputerach, które pracują jednocześnie nad konkretnym problemem, takim jak przewidywanie jutrzejszej pogody. Jednostki obliczeniowe mogą być rozmieszczone bardzo blisko siebie i być skoordynowane lub mogą być oddalone od siebie. Gdy jednostki obliczeniowe są rozdzielone, nazywa się to programowaniem rozproszonym. W takim scenariuszu bardzo często jednostki obliczeniowe różnią się od siebie, a także system operacyjny i konfiguracja sieci, co sprawia, że programowanie czynności obliczeniowych jest szczególnie trudne.
Podczas rozwiązywania problemu w sposób rozproszony, program musi zostać podzielony, aby części programu mogły działać na różnych jednostkach obliczeniowych; te części są często nazywane „procesami”. Procesy przebiegają jednocześnie, ale wymagają wzajemnego przekazywania danych wejściowych i wyników. Jeśli procesy działają na innym sprzęcie, na przykład jedna część działa na Intelu, a druga na SUN, programy muszą być kompilowane i optymalizowane w inny sposób.
Jednym ze sposobów rozwiązania wystarczająco trudnego problemu jest rozbicie części wejściowych i zmuszenie różnych jednostek obliczeniowych do pracy nad różnymi częściami przy użyciu tego samego algorytmu, zestawu reguł lub kroków rozwiązywania problemów. Na przykład, aby złamać genom składający się z 10,000 1,000 par, pierwsze 1,000 par można przypisać do pierwszej jednostki obliczeniowej, drugie XNUMX par do drugiej jednostki obliczeniowej i tak dalej, wszystkie przy użyciu tego samego algorytmu. Jedną z zalet programowania rozproszonego jest to, że różne jednostki obliczeniowe mogą uruchamiać różne algorytmy w celu rozwiązania tego samego problemu, co prowadzi do znacznie lepszego rozwiązania. Jest to podobne do układania puzzli, w którym niektórzy ludzie układają obramowanie, podczas gdy inni układają elementy w określonym kolorze.
Szczególnie trudnym zadaniem może być koordynacja procesów przetwarzania rozproszonego. Niektóre jednostki obliczeniowe mogą ulec awarii lub mogą zostać przerwane w celu wykonania innej pracy. Wiadomości zawierające dane wejściowe lub wyniki obliczeń mogą nie dotrzeć do swoich miejsc docelowych. Jeśli programy są napisane w naiwny sposób, utrata jednostki obliczeniowej lub niektórych wiadomości może spowodować zawieszenie się całego zestawu komputerów.
W programowaniu rozproszonym jeden proces może być procesem kontrolnym, zasadniczo wykonującym pracę przez inne procesy, lub wszystkie procesy mogą działać w sposób peer-to-peer, bez żadnego procesu będącego „nadrzędnym”. Niektóre przykłady problemów podejmowanych w przypadku programowania rozproszonego obejmują analizę danych geologicznych pod kątem zasobów takich jak ropa naftowa, modelowanie białek i molekuł biologicznych, łamanie zakodowanych wiadomości i symulacje wojskowe. Projekt SETI, którego celem jest poszukiwanie inteligentnego życia pozaziemskiego na podstawie wiadomości radiowych odbieranych przez Ziemię, jest prawdopodobnie jednym z najbardziej znanych przykładów.