Edward Lee predicted in 2006 that the shared-memory vs. message-passing debate was a false dichotomy. A 2019 study of 171 real concurrency bugs across major Go projects (Docker, Kubernetes, etcd, CockroachDB) confirmed this: message-passing bugs were at least as common as shared-memory bugs, with ~58% of blocking bugs caused by message passing. Go channels are shown to be concurrent queues — shared mutable data structures — not true channels with distinct endpoints. Every classic shared-mutable-state failure mode (deadlock, leak, race, protocol violation) has a direct channel equivalent. Even Erlang, with its strongest isolation guarantees, reintroduced shared mutable state via ETS tables due to performance requirements. The conclusion: message passing relocates shared state rather than eliminating it, and the real question is whether the entire concurrency model needs rethinking.
Table of contents
The PredictionThe ExperimentThe ResultsThe CodeWhy This Keeps HappeningSo Now What?Sort: