Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
0% found this document useful (0 votes)
284 views

Multi Threading Models

There are three main multithreading models: many-to-one maps all threads to a single process, one-to-one maps each thread to its own process, and many-to-many maps some threads to processes while allowing others to share processes. Common thread design patterns include the boss/workers model with one thread assigning work to others, the pipeline model which passes work sequentially between threads, and using version stamps to keep shared data consistent across threads.

Uploaded by

aayush
Copyright
© © All Rights Reserved
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
284 views

Multi Threading Models

There are three main multithreading models: many-to-one maps all threads to a single process, one-to-one maps each thread to its own process, and many-to-many maps some threads to processes while allowing others to share processes. Common thread design patterns include the boss/workers model with one thread assigning work to others, the pipeline model which passes work sequentially between threads, and using version stamps to keep shared data consistent across threads.

Uploaded by

aayush
Copyright
© © All Rights Reserved
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
You are on page 1/ 11

Multi Threading Models

Multithreading models
There are three dominant 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)

Similar models can apply on scheduling


kernel threads to real CPUs

Many-to-one
In this model, the library maps all
threads to a single lightweight process
Advantages:
totally portable
easy to do with few systems
dependencies
Disadvantages:
cannot take advantage of parallelism
may have to block for synchronous
I/O
there is a clever technique for
avoiding it
Mainly used in language systems,
portable libraries

One-to-one
In this model, the library maps each
thread to a different lightweight
process
Advantages:
can exploit parallelism, blocking
system calls
Disadvantages:
thread creation involves LWP
creation
each thread takes up kernel
resources
limiting the number of total
threads
Used in LinuxThreads and other
systems where LWP creation is not
too expensive

Many-to-many
In this model, the library has
two kinds of threads: bound
and unbound
bound threads are mapped
each to a single
lightweight process
unbound threads may be
mapped to the same LWP
Probably the best of both
worlds
Used in the Solaris
implementation of Pthreads
(and several other Unix
implementations)

High-Level Program Structure


Ideas
Boss/workers model
Pipeline model
Up-calls
Keeping shared information
consistent using version stamps

Thread Design Patterns


Common ways of structuring programs using threads
Boss/workers model
boss gets assignments, dispatches tasks to workers
variants (thread pool, single thread per connection)

Pipeline model
do some work, pass partial result to next thread

Up-calls
fast control flow transfer for layered systems

Version stamps
technique for keeping information consistent

Boss/Workers
Boss: Worker:
forever {
taskX();
get a request
switch(request)
case X: Fork (taskX)
case Y: Fork (taskY)

Advantage: simplicity
Disadvantage: bound on number of workers, overheard of
threads creation, contention if requests have interdependencies
Variants: fixed thread pool (aka workpile, workqueue),
producer/consumer relationship, workers determine what needs
to be performed

Pipeline
Each thread completes portion of a
task, and passes results
like an assembly line or a processor
pipeline
Advantages: trivial synchronization,
simplicity
Disadvantages: limits degree of
parallelism, throughput driven by
slowest stage, handtuning needed

Up-calls
Layered applications, e.g. network protocol stacks
have top-down and bottom-up flows
Up-calls is a technique in which you structure layers so
that they can expect calls from below
Thread pool of specialized threads in each layer
essentially an up-call pipeline per connection

Advantages: best when used with fast, synchronous


control flow transfer mechanisms or program
structuring tool
Disadvantages: programming becomes more
complicated, synchronization required for top-down

Version Stamps
(Not a programming structure idea
but useful technique for any kind
of distributed environment)
Maintain version number for
shared data
keep local cached copy of data
check versions to determine if
changed

You might also like