@liw "The Morning Paper" can partially fill the gap:
- a paper about "convoy phenomenon", a peculiar way in which one slow process can leave the whole system bottlenecked even when it's done doing the work: https://blog.acolyer.org/2019/07/01/the-convoy-phenomenon/
- a paper about bugs that cause incidents in clouds (applicable to any system IMHO): https://blog.acolyer.org/2019/06/21/what-bugs-cause-cloud-production-incidents/
- a paper about how Go's concurrency primitives don't actually lower the number of bugs: https://blog.acolyer.org/2019/05/17/understanding-real-world-concurrency-bugs-in-go/
- and many more in the archives.
@ben Okay, sorry, my summary was absolutely wrong: the paper (and the article) compare Go's shared memory primitives with channels, and finds that message passing created more blocking bugs than traditional synchronization primitives. (The outcome is different for non-blocking.)
There are a ton of caveats there; see Section 4 of the paper, "Threats to validity".
Section 8 mentions seven other empirical studies of the same sort; perhaps the answer to your question is somewhere in there.
functional.cafe is an instance for people interested in functional programming and languages.