when multiple tasks are executed at the same time (or almost the same time). one or more cpus.
divide a large task into parts by function or by data gain efficiency by using different processors to simultaneously execute parts of a task
programming in a language that allows you to explicitly indicate how different portions of the computation may be executed concurrently by different processors