running multiple task simultaneously: establishing criteria that determine when a task is performed, synchronization among tasks to coordinate sharing, and allocation of computing resources
computers understanding how to divide tasks into parts that can be distributed across each core; allows multicore processors to be used effectively
when a processor executes more than one instruction at a time and works well with today's multi-core microprocessors