Operating system task scheduling
Threads are the smallest units of processing that are executed by an operating system, and
allow the application logic to be separated into several concurrent execution paths. Threads are
useful when complex applications have many tasks that can be performed at the same time.
When an operating system executes an instance of an application, it creates a unit called a
process to manage the instance. The process has a thread of execution. This is the series of
programming instructions performed by the application code. For example, if a simple
application has a single set of instructions that can be performed serially, that set of
instructions is handled as a single
task
, and there is just one execution path (or
thread
) through
the application. More complex applications may have several
tasks
that can be performed
concurrently instead of serially. An application can do this by starting separate processes for
each task, which is a resource-intensive operation, or start separate threads, which are relatively
less resource-intensive. Additionally, each thread can be scheduled for execution
independently from the other threads associated with a process.
Threads allow complex applications to make more effective use of a processor (CPU), even on
computers that have a single CPU. With one CPU, only one thread can execute at a time. If one
thread executes a long-running operation that doesn’t use the CPU, such as a disk read or
write, another one of the threads can execute until the first operation is completed. By being
able to execute threads while other threads are waiting for an operation to be completed, an
application can maximize its use of the CPU. This is especially true for multi-user, disk I/O
intensive applications such as a database server. Computers that have multiple CPUs can
execute one thread per CPU at the same time. For example, if a computer has eight CPUs, it
can execute eight threads at the same time.
In the scope of SQL Server, a
request
is the logical representation of a query or batch. A request
also represents operations required by system threads, such as checkpoint or log writer.
Requests exist in various states throughout their lifetime and can accumulate waits when
resources required to execute the request aren’t available, such as
locks
or
latches. For more
information about request states, see
sys.dm_exec_requests.
task scheduling