>Asynchrony: the possibility for tasks to run out of order and still be correct.
I like this. Great addition and yes it was missing.
>Concurrency: the ability of a system to progress multiple tasks at a time, be it via parallelism or task switching.
I would say here, be it multiprocessing or task switching.
>Parallelism: the ability of a system to execute more than one task simultaneously at the physical level.
This is technically multiprocessing as expressed above.
So, what is the difference between parallelism and concurrency?
Parallel tasks are like shaders. It is the same task, running many instances at the same time at the physical layer.
GPU devices are capable of parallel computing, for example.
Concurrent tasks are different tasks running at the same time at the physical layer. Often, the data is different too. Say a sprite engine running at the same time as a video display driver on the physical layer.
The shaders can all be running the same code but are processing different data elements, say each pixel having a position and is part of a larger rendering.
A GPU is a massively parallel multiprocessor.
A Threadripper is a massive Concurrent multiprocessor. It can also perform as a modest parallel multiprocessor.
The difference lies in what the various compute units can do and what they are actually doing.
Put another way, a 10ghz single core CPU is not a multiprocessor. It performs sequential computing and it can task switch to handle the same task load as a lower clock rate multiprocessor would handle.
A 10ghz multi core CPU is a concurrent multiprocessor, but is not a GPU. It could run shaders on par with a lower clock GPU. BUT a lower clock GPU cannot run a variety of tasks in the same way.