The first concept to define is that of the process . They see it as a program which runs on the machine, co-existing and sharing CPU, disk and memory resources with other programs. Programmers know a process to be an invocation of executable code, such that that code has a unique existence, and the instructions executed by that process are executed in an ordered manner. On the whole, processes execute in isolation. The operating system provides this virtualisation.
Processes execute modules of code.
However, they may also be shared, as in the case of DLL's. The code for a DLL is typically being executed in the context of many different processes, often simultaneously. Of course, where different processes interact, the programmer must impose an ordering, a central problem which will be covered later. Our next concept is that of the thread . Threads were developed when it became clear that it was desirable to have applications which performed sets of actions in a more loosely time ordered fashion, possibly performing several sets of actions at once.