Technically, a thread is defined as an independent stream of instructions that can be scheduled to run as such by the operating system. But what does this mean?
To the software developer, the concept of a “procedure” that runs independently from its main program may best describe a thread.
To go one step further, imagine a program that contains a number of procedures. Then imagine all of these procedures being able to be scheduled to run simultaneously and/or independently by the operating system. That would describe a “multi-threaded” program.
How is this accomplished?
Before understanding a thread, one first needs to understand a UNIX process. A process is created by the operating system, and requires a fair amount of “overhead”. Processes contain information about program resources and program execution state, including:
Unix process
Threads within a unix process
Threads use and exist within these process resources, yet are able to be scheduled by the operating system and run as independent entities. To accomplish this, threads only hold the bare essential resources that enable them to exist as executable code, such as:
So, in summary, in the UNIX environment a thread:
Because threads within the same process share resources: