Parallel processing is the use of multiple processors to execute different parts of the same program simultaneously.
The main goal of parallel processing is to reduce wall-clock time. There are also other reasons, which will be discussed later on in this section.
Imagine yourself having to order a deck of playing cards: a typical solution would be to first order them by suit, and then by rank-order within each suit. If there were two of you doing this, you could split the deck between you and both could follow the above strategy, combining your partial solutions at the end; or one of you could sort by suit, and the other by order within suits, both of you working simultaneously. Both of these scenarios are examples of the application of parallel processing to a particular task, and the reason for doing so is very simple: reduce the amount of time before achieving a solution. If you've ever played card games that use multiple decks, you've almost certainly engaged in parallel processing by having multiple people help with the tasks of collecting, sorting and shuffling all of the cards.

You can use this analogy to see indications of both the power and the weakness of the parallel approach, by taking it gradually to its extreme: as you increase the number of helpers involved in a particular task, you'll generally experience a characteristic speedup curve demonstrating how up-to-a-certain-number of helpers is beneficial, but any over that simply get in each others' way and reduce the overall time to completion. Consider, for example, how little it would help to have 52 people crowding around a table, each responsible for putting one particular card into its proper place in the deck -- this is exactly what is meant by the adage Too many cooks spoil the broth.

If you'd like to do an exercise which will drive home some of the aspects of both the power and the limitations of parallel programming, click here.