WebGL visualizations clarify thinking about concurrency and parallelism. link
Transported image. source
This is parallel. Time flows down. Blue lines in the animations are CPUs at work. Many, many things happen simultaneously.
They might not have anything to do with one another.
Transported image. source
This is concurrent. Red lines indicate messages between concurrent processes.
.
I was clearing old email today (September 2017) and found a message I was hoarding specifically to remind me about this post.
Today I also visited two sources referenced in the article:
Parallelism is not Concurrency, a 30 min talk by Rob Pike given at Heroku's Waza in 2012. He offers remarkably clear concurrent architectures for the task of gophers delivering a pile of old C++ manuals to one or more incinerators. He also strongly recommends the ACM paper by Tony Hoare. slides talk
Communicating Sequential Processes ACM article by Tony Hoare. paper
What I want to remember from these lessons from Rob Pike, and from skimming Tony Hoare's paper; 1) thinking clearly about concurrency in software architecture empowers application of parallelism later; and 2) communication and coordination are a defining difference between concurrency (includes communication) and parallelism (needn't include communication).
meta-wiki-thought: I wonder how my future self will view this journal entry when next I'm in the mood to clean-up or just sift through old messages.