Download Threads

Survey
yes no Was this document useful for you?
   Thank you for your participation!

* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project

Document related concepts

Flow-based programming wikipedia , lookup

Stream processing wikipedia , lookup

Parallel computing wikipedia , lookup

Scheduling (computing) wikipedia , lookup

Monitor (synchronization) wikipedia , lookup

Thread (computing) wikipedia , lookup

Transcript
Lecture 5: Threads








process as a unit of scheduling and a unit of resource
allocation
processes vs. threads
what to program with threads
why use threads
two types of threads:
• user-level threads
• kernel-level threads
multiple thread models
thread pools
thread APIs
1
Two Aspects of a Process


process can be viewed two ways:
• unit of resource ownership
 a process has an address space, containing program code and data
 a process may have open files, may be using an I/O device, etc.
• unit of scheduling
 the CPU scheduler dispatches one
process at a time onto the CPU
 associated with a process are values
in the PC, SP, and other registers
insight (~1988) — these two are usually linked,
but they don’t have to be; many recent operating
systems attempt to separate these two aspects
(modern Unices, Windows XP):
• process = unit of resource ownership
• thread = unit of scheduling
2
Process vs. Threads


process
• has – address space, program code, global
variables, heap, stack, OS resources (files,
process' address space
I/O devices, etc.)
thread – is a single sequential execution stream
access to file
data
within a process
access to printer
• has its own (other threads can access but
shouldn’t)
stack
stack
 registers, program counter (PC)
 stack, stack pointer (SP)
PC
PC
• with other threads of the process
thread B
thread A
 shares process resources
 executes concurrently
 can block, fork, terminate, synchronize
program code
3
What to Program with Threads


good programs to multithread:
• programs with multiple independent tasks:
 most programs with GUIs – need to provide quick userresponse while carrying out main task
• server which needs to process multiple independent requests
simultaneously
• OS kernel
• repetitive numerical tasks — break large problem, such as weather
prediction/matrix multiplication, down into small pieces and assign
each piece to a separate thread
programs difficult to multithread:
• programs that don’t have multiple concurrent tasks (99% of all
programs)
• multi-task programs that require protection between tasks (maybe
one needs to run as root)
4
Why Use Threads


alternative – implement ad hoc switching and scheduling
between tasks within process
• threads are more intuitive to program,
• easy to switch between task contexts and coordinate between
alternative – create multiple processes
• threads are cheaper to create — only need a stack and storage for
registers
• use very little resources — don’t need new address space, global data,
program code, or OS resources
• context switches are fast — only have to save / restore PC, SP, and
registers
• communication between threads is easy – they share address space
from “Unix Internals” by Uresh Vahalia
5
User-Level Threads


provide a library of functions to allow user processes to
manage (create, delete, schedule) their own threads
• OS is not aware of threads
advantages:
• doesn’t require modification to the OS
• simple representation — each thread is represented simply by a PC,
registers, stack, and a small control block, all stored in the user
process’ address space
 which segment?
• simple management — creating a new thread, switching between
threads, and synchronization between threads can all be done without
intervention of the kernel
• fast — thread switching is not much more expensive than a procedure
call
• flexible — CPU scheduling (among those threads) can be customized
to suit the needs of the algorithm
6
User-Level Threads (Cont.)

disadvantages:
• lack of coordination between threads and OS kernel
 process as a whole gets one time slice
 same time slice, whether process has 1 thread or 1000
threads
 also — up to each thread to relinquish control to other
threads in that process
• requires non-blocking system calls
 otherwise, entire process will blocked in the kernel, even if
there are runnable threads left in the process
7
Kernel-Level Threads



kernel provides system calls to create and manage
threads
advantages
• kernel has full knowledge of all threads - scheduler may choose to
give a process with 10 threads more time than process with only 1
thread
• good for applications that frequently block (e.g., server processes
with frequent interprocess communication)
disadvantages:
• slower — thread operations are significantly slower than for userlevel threads
• significant overhead and increased kernel complexity — kernel
must manage and schedule threads as well as processes - requires
a full thread (task) control block (TCB) for each thread
8
Multithreading Models



Many-to-One (Solaris’ green threads) – all user threads are mapped to
one kernel thread: same problems as with user threads
One-to-One (Windows XP, OS/2) – one user thread to one kernel
thread
• programmer has better control of concurrency
• does not block the process on one thread blocking
• may potentially waste resources
Many-to-Many – multiplexes many user-level threads to a smaller or
equal number of kernel-level threads
• allocation is specific to a particular machine (more k. threads may
be allocated on a multiprocessor)
9
Two-Level Thread Model
(Digital UNIX, Solaris, IRIX, HP-UX)
task 1
task 2
task 3
user-level
thread
lightweight
process

kernel
thread
kernel

CPU
CPU
CPU CPU
ULTs can be multiplexed on lighweight processes
ULTs can be “pinned “ to a processor
kernel thread may not have a corresponding LWP

user-level threads for
user processes
• “lightweight
process” (LWP)
serves as a
“virtual CPU”
where user
threads can run
kernel-level threads
for use by kernel
• one for each LWP
• others perform
tasks not related
to LWPs
OS supports
multiprocessor
systems
10
Thread Pools




threads may not be created infinitely – overwhelm computer resources
• consider web-server
on-demand thread creation may not be fast enough
thread pool
• create a number of threads in a pool where they remain blocked
until activated
• activate when request arrives
• if more requests than threads – extra requests have to wait
performance
• controllable process size
• fast response until pool exhausted
11
Thread APIs

POSIX threads (pthreads)
• A POSIX standard (IEEE 1003.1c) API for thread creation and
synchronization
• Common in UNIX operating systems (Solaris, Linux, MacOS X)
• implemented on top of “native” OS threads or as a user-level package

Win32 threads
• one-to-one mapping
• implemented on Windows OSes

Java threads
• specified as part of Java
• maintained by JVM
• implemented on native threads or as a user-level package
12
Lecture Review








thread is a stream of execution
process may have several threads
threads share address space of the process and own register and stack
threads are good for programming tasks that require several relatively
independent tasks
threads are more efficient than processes and provide more convenient
programming primitives than ad hoc context switching
threads can be implemented in kernel-level or user-level
there are several models of thread implementation: many-to-one, one-toone, many-to-many
thread pool is a technique of thread programming used to optimize memory
usage and response time
13