Concurrency versus parallelism
Understanding the distinction between concurrency and parallelism, and knowing how .NET supports both, is essential for building responsive, high-performance applications.
Concurrency
Concurrency is the ability of a system to handle multiple tasks or processes that make progress in overlapping time periods. The tasks might not be executing simultaneously at every instant. For example, on a single-core processor using time-slicing, the CPU switches rapidly between tasks. Concurrency is about dealing with many things at once.
Parallelism
Parallelism is the ability of a system to execute multiple tasks, or parts of a task, literally at the same time, typically by using multiple CPU cores. Parallelism is about doing many things at once.
You can have concurrency without parallelism: a single core with many threads, time-sliced. You can also have parallelism without much concurrency-style design: one big array crunched across many cores at once. async/await is fundamentally a concurrency tool, not a parallelism tool. That is the single most common confusion in C#. The hardware and operating system underneath are in processes, threads and context switchesProcesses, threads and context switchesCores run threads, and the OS swaps threads on and off them.Opens in a new tab and the thread poolThe thread poolA set of reusable worker threads that take jobs from a queue.Opens in a new tab.
async/await is about concurrency, and it is covered in the async chapterAsync and awaitAwait frees the thread while an operation waits, and the method picks up where it left off.Opens in a new tab. The .NET mechanisms for each are in the next noteThe tools .NET gives you for concurrency and parallelismThreads, tasks, Parallel loops, PLINQ and async/await, and what each is for.Opens in a new tab.
Sources
- Concurrency and Parallelism in ASP.NET Core, C# Corner · accessed May 16, 2025
- What is the difference between concurrency and parallelism?, Stack Overflow · accessed May 16, 2025