> Look up communicating sequential processes and never have a problem with multi-threading again.
Go does that yet still need mutexes, has race conditions and memory corruption.
"never have a problem with multi-threading again" was not meant literally. Rather that grasping the concept of "sharing data by communicating" helps you structure your programs.
Reaaally not that simple.
I think it helps a lot. I read about the principle (share data by communicating) 10 years ago and structure most of my multi-threaded apps using BlockingQueues or similar.
Didn't have a problem since.
It does help a lot in many instances. I've been using 0MQ for this purpose, which facilitates the style nicely. However, things like setup/teardown and configuration are still not at all easy to get right -- and not all problems are apt for this style of concurrency, and it doesn't really change much about optimization; getting the most out of the platform is difficult and takes time, CSP doesn't really make a big difference there.