Any modern programming language has to offer plenty of support for concurrency and parallelism. The reason is that even tiny embedded devices have CPUs with multiple cores these days. In order to make effective use of these systems the programmer has to give hints to the compiler and runtime system and outline which parts of the program can run in parallel. Concurrency is the overlapped execution of tasks whereas parallelism is the simultaneous execution of tasks. Concurrency can be beneficial as a program structuring mechanism and is tied to the notion of “blocking” or rather its avoidance. The primary example for the benefits of concurrency is a server which should be responsive to new requests even though old requests have not yet finished. Parallelism is a means to make programs run faster and a good example use case for it is graphics programming: Every pixel can be accessed independently of the other pixels on the screen and can be written to in order to change its color and produce a shape. The mechanisms we look at here are useful both for concurrency and parallelism.