Il message passing è comodo per certe cose, ma per implementare una map-reduce con overhead molto basso non va bene, hai comunque bisogno di locking sulle code degli eventi, event loop e compagnia. In generale, avevo letto un articolo di uno che sosteneva che, con l'aumentare del numero di core, qualunque genere di locking va abolito (per via della Amdahl's law), addirittura compresi gli interi atomici (prefissi LOCK, LFENCE/RFENCE & co.); la sua idea di fondo è che la stessa idea di "correttezza sempre" va abbandonata, a favore della "eventual consistency". Qui ci sono un po' di link interessanti.
Per intanto a mio parere meglio avere un modello semplice con cui ragionare.
"Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares