Concurrent versus parallel
These are two key constructs are often confused by developers, and warrant clear demystification. The authors strongly feel that a thorough understanding of this distinction holds the key to effective software design for achieving more by effective utilization of the available infrastructure (processors, cores, hardware, and software threads). Let's start with the classical definition by Rob Pike (inventor of the Go programming language), and try to decode its meaning.
 | Parallelization is doing multiple tasks (related or non-related) at the same time whereas concurrency is about dealing with lots of things at once. Concurrency is about structure; parallelism is about execution. Concurrency provides a way to structure a solution to solve a problem that may (but not necessarily) be parallelizable. |  |
 | --Rob Pike |
This clearly articulates the difference between these constructs, and goes further to illustrate how concurrency, as a model, helps to structure a program...