Why Process Concurrently?

Multitasking is actually a form of Concurrent Processing. Normally when we write programs, we specify the exact order of everything the computer does. Often, however, the order is not important and, indeed, irrelevant. This especially true between separate modules which do isolated tasks. Concurrent Processing, then, allows the computer to chose this order for us; it relieves us of having to specify this order and allows the computer to optimize its processing according to the particular enviornment.

Computer Chooses the Order...
Concurrent processing allows us to share and efficiently manage resources (multiplexing a resource). For example, if a task wants to print a file and another file is printing, the print manager insures they don't print at the same time (controlled sharing); since the first task must wait, the scheduler reuses the task's processor to run another task (efficiency).

...So We Don't Have To.
Another under-appreciated benefit of concurrent processing is the power and conceptual simplicity it brings to our programs. We can think and reason about parts of a program as separate tasks, modules of data AND control. Within a task module, instructions happen sequentially, are strongly synchronized and strongly determined. Outside a task, instructions happen in parallel, are loosely synchronized and loosely determined. The strong control and data modularization concurrent processing encourages allows complex programs to be broken down into models which more resemble their real-world counter-parts.

For example, a full-screen on-line text editor really has two tasks: to modify the internal data structures according to the keyboard input, and to display the internal data structures via the screen output. The first task essentially waits for the keyboard, and the second waits for the screen. With this shared-memory multitasking model, the user never has to wait for the display. More importantly, the model is easily extended. For example, adding more display tasks can allow the same data to be displayed in different windows (or even on different screens) without worry of updating each of these each time a character is pressed. Likewise, with some additional synchronization, adding more keyboard tasks can allow the same data to be edited simultaneously by several people (a multi-user editor!).3

In summary, concurrent processing is a powerful programming concept. It not only allows us to use computers more efficiently, but lets them become more representative models of our concurrent world.