Non li ho mai trovati molto simili. Permettetemi di definire per gli scopi di questo post un "nodo" per essere un thread hardware in esecuzione su una macchina. Quindi una macchina quad-core è composta da quattro nodi, così come un cluster di quattro box a processore singolo.
Ogni nodo eseguirà in genere alcune elaborazioni e sarà necessario un tipo di comunicazione tra nodi. Di solito la prima istanza di questa comunicazione sta dicendo al nodo cosa fare. Per questa comunicazione, posso usare memoria condivisa, semafori, file condivisi, named pipe, socket, chiamate di procedure remote, COM distribuite, ecc. Ma i più facili da usare, memoria condivisa e semafori, non sono generalmente disponibili su una rete. I file condivisi potrebbero essere disponibili, ma le prestazioni sono in genere scadenti. Le prese tendono ad essere la scelta più comune e più flessibile su una rete, piuttosto che i meccanismi più sofisticati. A quel punto devi gestire i dettagli dell'architettura di rete, tra cui latenza, larghezza di banda, perdita di pacchetti, topologia di rete e altro ancora.
Se si inizia con una coda di lavoro, i nodi sulla stessa macchina possono utilizzare la semplice memoria condivisa per fare le cose. Puoi persino scriverlo senza chiave e funzionerà perfettamente. Con i nodi su una rete, dove metti la coda? Se lo centralizzi, quella macchina potrebbe avere costi di larghezza di banda molto elevati. Prova a distribuirlo e le cose si complicano molto rapidamente.
Quello che ho trovato, in generale, è che le persone che affrontano questo tipo di architettura parallela tendono a scegliere imbarazzanti problemi paralleli da risolvere. Raytracing mi viene in mente. Non c'è bisogno di molte comunicazioni tra nodi, a parte la distribuzione del lavoro. Ci sono molti problemi come questo, per essere sicuri, ma trovo un po 'falso suggerire che il calcolo distribuito è essenzialmente lo stesso del threading.
Ora se avete intenzione di andare a scrivere threading che si comporta in modo identico a un sistema distribuito, usando puro passaggio di messaggi e non assumendo che qualsiasi thread sia quello "principale" e così, allora sì, saranno molto simile. Ma quello che hai fatto è fingere di avere un'architettura distribuita e implementarla in thread. Il fatto è che il threading è un caso di parallelismo molto più semplice di quanto lo sia il vero computing distribuito. È possibile astrarre i due in un singolo problema, ma scegliendo la versione più dura e attenendosi strettamente ad essa. E i risultati non saranno buoni come potrebbero essere quando tutti i nodi sono locali a una macchina. Non stai approfittando del caso speciale.
La trasparenza di rete è esattamente il termine che stavo cercando. "molti strumenti utilizzati per la comunicazione tra processi sono trasparenti in rete" - esempi concreti? – sdcvvc