process vs task has some gray area
Parallel execution means 2 or more operations occur simultaneously
i.e. you need multiple processors to be parallel.
i.e. multiple thread doesn't mean parallel if it is on single CPU.
Concurrent execution is any situation in which execution of multiple threads appears to be performed in parallel.
i.e. if you have multiple threads running at the same time, you have concurrency
Goal is to modulize program to multiple processes/tasks so that we can run it under multiple CPU and perform it faster!
Communication between threads is expensive. It is essential though, so it has to be short and condenced as possible.
It is all about dealing with non-deterministic behaviors.