Though slightly beyond the scope of this book, there may come a time when you will want to run simultaneous paths of execution. If this happens, it's good to know the options that Clojure provides for running concurrent or parallel code. We should, of course, understand the difference between the two.
Concurrency occurs when many threads of execution are running independent of each other. This can technically happen on a single-core chip where a processor multitasks between performing work in each thread. Concurrency makes resource-intensive software more usable by allowing many things to happen at once. Parallelism is made possible by computer processors with multiple cores. It occurs when multiple tasks physically take place at the same time in a multicore chip. Performance is greatly improved by running many threads of execution at the same time. Clojure provides several ways of tackling concurrent execution based on the needs and constraints of a given situation...