a program which is intended to accomplish multiple tasks  at the same time  through the use of either multiple cores/processors on the same machine or multiple machines
multiple work units executing at the same time, can be done with or without multiple processors
programming in a language that allows you to explicitly indicate how different portions of the computation may be executed concurrently by different processors