Concurrency means multiple tasks which start, run, and complete in overlapping time periods, in no specific order. Parallelism is when multiple tasks OR several parts of a unique task literally run at the same time, e.g. on a multi-core processor.
Remember that concurrency and parallelism are NOT the same things. Let’s understand more in detail that what I mean when I say Concurrency vs. Parallelism.
Concurrency is essentially applicable when we talk about a minimum of two tasks or more. When an application is capable of executing two tasks virtually at the same time, we call it a concurrent application.
Though, in this case, tasks look like running simultaneously, but essentially they MAY not. They take advantage of the CPU time-slicing feature of the operating system where each task runs part of its task and then goes to the waiting state. When the first task is in the waiting state, the CPU is assigned to the second task to complete its part of the task.
Operating system based on the priority of tasks, thus, assigns CPU and other computing resources e.g. memory; turn by turn to all tasks and give them chance to complete. To the end-user, it seems that all tasks are running in parallel. This is called concurrency.
Parallelism does not require two tasks to exist. It literally physically run parts of tasks OR multiple tasks, at the same time using the multi-core infrastructure of CPU, by assigning one core to each task or sub-task.
Parallelism requires hardware with multiple processing units, essentially.
In a single-core CPU, we may get concurrency but NOT parallelism.
3. Differences between concurrency vs. parallelism
Now let’s list down remarkable differences between concurrency and parallelism.
- Concurrency is when two tasks can start, run, and complete in overlapping time periods. Parallelism is when tasks literally run at the same time, eg. on a multi-core processor.
- Concurrency is the composition of independently executing processes, while parallelism is the simultaneous execution of (possibly related) computations.
- Concurrency is about dealing with lots of things at once. Parallelism is about doing lots of things at once.
- An application can be concurrent but not parallel, which means that it processes more than one task at the same time, but no two tasks are executing at the same time instant.
- An application can be parallel but not concurrent, which means that it processes multiple sub-tasks of a task in a multi-core CPU at the same time.
- An application can be neither parallel nor concurrent, which means that it processes all tasks one at a time, sequentially.
- An application can be both parallel and concurrent, which means that it processes multiple tasks concurrently in a multi-core CPU at the same time.
That’s all about Concurrency vs. Parallelism, a very important concept in java multi-threading concepts.
Happy Learning !!