Two specific types of parallelism can be distinguished: task versus data parallelism. The former concentrates on ways to run parallel tasks, or units of work, to process some operation. This is the closest to the notion of threads. Data parallelism creates parallel units of work by means of applying operations to chunks of data, which can originate from a partitioning operation of a sequence. We first cover task parallelism.