Porazdeljeno programiranje je ena od oblik vzporednega programiranja ali vzporednega računalništva. Vzporedno programiranje vključuje računalnike in računalniške enote v računalnikih, ki sočasno delajo na določeni težavi, kot je napovedovanje jutrišnjega vremena. Računalniške enote so lahko zelo blizu in usklajene ali pa so lahko nameščene narazen. Ko so računalniške enote ločene, se temu reče porazdeljeno programiranje. V takem scenariju se računalniške enote zelo pogosto razlikujejo med seboj, razlikujejo pa se tudi operacijski sistem in nastavitev omrežja, zaradi česar je programiranje računalniške dejavnosti še posebej zahtevno.
Pri reševanju problema na porazdeljen način je treba program razdeliti, da se deli programa lahko izvajajo na različnih računalniških enotah; ti deli se pogosto imenujejo “procesi”. Procesi potekajo hkrati, vendar morajo med seboj sporočati vložke in rezultate. Če se procesi izvajajo na različni strojni opremi, na primer en del, ki se izvaja na Intelu in drugi na SUN, je treba programe prevesti in optimizirati drugače.
Eden od načinov za rešitev dovolj težkega problema je, da razbijete vhodne dele in da različne računalniške enote delajo na različnih delih z uporabo istega algoritma, niza pravil ali korakov za reševanje problemov. Na primer, če želite razbiti genom 10,000 parov, bi lahko prvih 1,000 parov dodelili prvi računalniški enoti, drugih 1,000 parov dodelili drugi računalniški enoti in tako naprej, vse z uporabo istega algoritma. Pri porazdeljenem programiranju je ena od prednosti, da lahko različne računalniške enote izvajajo različne algoritme za reševanje istega problema, kar vodi do bistveno boljše rešitve. To je podobno reševanju sestavljanke, pri kateri nekateri ljudje sestavljajo mejo, medtem ko drugi sestavljajo kose določene barve.
Posebej težka naloga je lahko usklajevanje porazdeljenih računalniških procesov. Nekatere računalniške enote lahko odpovejo ali pa se prekinejo zaradi opravljanja drugega dela. Sporočila, ki vsebujejo vnose ali rezultate izračuna, morda ne bodo prispela na cilj. Če so programi napisani naiven, lahko izguba računalniške enote ali nekaterih sporočil povzroči, da se celoten sklop računalnikov obesi.
Pri porazdeljenem programiranju je lahko en proces nadzorni proces, ki v bistvu opravlja delo z drugimi procesi, ali pa bi lahko vsi procesi delovali na način enakovrednih, pri čemer noben proces ni “glavni”. Nekateri primeri težav pri porazdeljenem programiranju vključujejo analizo geoloških podatkov za vire, kot je nafta, modeliranje beljakovin in bioloških molekul, pokanje kodiranih sporočil in vojaške simulacije. Projekt SETI za iskanje inteligentnega nezemeljskega življenja iz radijskih sporočil, ki jih je prejela Zemlja, je morda eden najbolj znanih primerov.