Software
Multithreading
What is Multi-threading? :
The ability of an operating system to
execute different parts of a program, called
threads, simultaneously. The programmer
must carefully design the program in such a
way that all the threads can run at the same
time without interfering with each other
Advantages of Multi-threading :
If a thread can not use all the computing resources
of the CPU (because instructions depend on each
other's result), running another thread permits to
not leave these idle. If several threads work on the
same set of data, they can actually share its
caching, leading to better cache usage or
synchronization on its values. If a thread gets a lot
of cache misses, the other thread(s) can continue,
taking advantage of the unused computing
resources, which thus can lead to faster overall
execution, as these resources would have been
idle if only a single thread was executed
Two levels of thread :
Two levels of thread User level(for user
thread) Kernel level(for kernel thread)
User Threads
User threads are supported above the kernel and
are implemented by a thread library at the user
level. The library provides support for thread
creation, scheduling, and management with no
support from the kernel.Because the kernel is
unaware of user-level threads, all thread creation
and scheduling are done in user space without
the need for kernel intervention. User-level
threads are generally fast to create and manage
User-thread libraries include POSIX Pthreads,Mach
C-threads,and Solaris 2 UI-threads.
Kernel Threads
Kernel threads are supported directly by the
operating system: The kernel performs
thread creation, scheduling, and
management in kernel space. Because thread
management is done by the operating
system, kernel threads are generally slower
to create and manage than are user threads.
Most operating systems-including Windows
NT, Windows 2000, Solaris 2, BeOS, and
Tru64 UNIX (formerly Digital UN1X)-support
kernel threads
Multi-threading Models :
There are three models for thread libraries,
each with its own trade-offs
Many threads on one LWP (many-to-one)
One thread per LWP (one-to-one)
Many threads on many LWPs (many-tomany)
Many-to-one
The many-to-one model maps many userlevel threads to one kernel thread.
Advantages: Totally portable More efficient
Disadvantages: cannot take advantage of
parallelism The entire process is block if a
thread makes a blocking system call Mainly
used in language systems, portable libraries
like solaris 2
One-to-one
The one-to-one model maps each user
thread to a kernel thread. Advantages:
allows parallelism Provide more concurrency
Disadvantages: Each user thread requires
corresponding kernel thread limiting the
number of total threads Used in
LinuxThreads and other systems like
Windows 2000,Windows NT
Many-to-many
The many-to-many model multiplexes many
user-level threads to a smaller or equal
number of kernel threads. Advantages: Can
create as many user thread as necessary
Allows parallelism Disadvantages: kernel
thread can the burden the performance
Used in the Solaris implementation of
Pthreads (and several other Unix
implementations)?