EJEMPLO 3 Threads
EJEMPLO 3 Threads
Rajkumar Buyya
Grid Computing and Distributed Systems (GRIDS)
Laboratory
Dept. of Computer Science and Software Engineering
University of Melbourne, Australia
http://www.gridbus.org/~raj or http://www.buyya.com
1
Agenda
Introduction
Thread Applications
Defining Threads
Java Threads and States
Examples
2
A single threaded program
class ABC
{
….
public void main(..) begin
{
… body
.. end
}
}
3
A Multithreaded Program
Main Thread
start
start start
5
Multithreaded Server: For Serving
Multiple Clients Concurrently
Client 2
Process
6
Modern Applications need Threads (ex1):
Editing and Printing documents in
background.
Printing
Printing Thread
Thread
Editing
Editing
Thread
Thread
7
Web/Internet Applications:
Serving Many Users
Simultaneously
PC client
Internet
Server
Local Area Network
PDA
8
Multithreaded/Parallel File
Copy
reader()
reader()
{{ writer()
writer()
-- -- -- -- -- -- -- -- -- buff[0] {{
-- buff[0]
-- -- -- -- -- -- -- -- -- --
lock(buff[i]);
lock(buff[i]); lock(buff[i]);
buff[1] lock(buff[i]);
read(src,buff[i]);
read(src,buff[i]); buff[1] write(src,buff[i]);
write(src,buff[i]);
unlock(buff[i]);
unlock(buff[i]); unlock(buff[i]);
unlock(buff[i]);
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
-- }}
}}
Cooperative
Cooperative Parallel
Parallel
Synchronized
Synchronized Threads
Threads 9
Code-Granularity
Code-Granularity
Code
CodeItem
Item
Sockets/ Task
Taski-l
i-l Task
Taskii Task
Taski+1
i+1 Large
Largegrain
grain
PVM/MPI (task
(tasklevel)
level)
Program
Program
func1
func1( () ) func2
func2( () ) func3
func3( () )
{{ {{ {{ Medium
Mediumgrain
grain
Threads ....
....
....
....
....
....
....
....
....
(control
(controllevel)
level)
.... .... .... Function
}} }} }} Function(thread)
(thread)
Fine
Finegrain
grain
aa( (00) )=.. aa( (11)=.. aa( (22)=.. (data
Compilers =..
bb( (00) )=..
)=..
bb( (11)=..
)=..
bb( (22)=.. (datalevel)
level)
=.. )=.. )=.. Loop
Loop(Compiler)
(Compiler)
Very
Veryfine
finegrain
grain
CPU ++ xx Load
Load (multiple
(multipleissue)
issue)
With
Withhardware
hardware
10
What are Threads?
A piece of code that run in concurrent
with other threads.
Each thread is a statically ordered
sequence of instructions.
Threads are being extensively used
express concurrency on both single and
multiprocessors machines.
Programming a task having multiple
threads of control – Multithreading or
Multithreaded Programming.
11
Java Threads
Java has built in thread support for
Multithreading
Synchronization
Thread Scheduling
Inter-Thread Communication:
currentThread start setPriority
yield run getPriority
sleep stop suspend
resume
Java Garbage Collector is a low-priority
thread.
12
Threading Mechanisms...
Create a class that extends the Thread
class
Create a class that implements the
Runnable interface
13
1st method: Extending
Thread class
Threads are implemented as objects that
contains a method called run()
class MyThread extends Thread
{
public void run()
{
// thread body of execution
}
}
Create a thread:
MyThread thr1 = new MyThread();
Start Execution of threads:
thr1.start();
Create and Execute:
new MyThread().start();
14
An example
class MyThread extends Thread { // the thread
public void run() {
System.out.println(" this thread is running ... ");
}
} // end class MyThread
15
2nd method: Threads by
implementing Runnable interface
class MyThread implements Runnable
{
.....
public void run()
{
// thread body of execution
}
}
Creating Object:
thr1.start();
16
An example
class MyThread implements Runnable {
public void run() {
System.out.println(" this thread is running ... ");
}
} // end class MyThread
class ThreadEx2 {
public static void main(String [] args ) {
Thread t = new Thread(new MyThread());
// due to implementing the Runnable
interface
// I can call start(), and this will call run().
t.start();
} // end main()
} // end class ThreadEx2
17
Life Cycle of Thread
new
wait()
start() sleep()
suspend()
blocked
runnable non-runnable
notify()
stop()
slept
resume()
dead unblocked
18
A Program with Three Java
Threads
Write a program that creates 3
threads
19
Three threads example
class A extends Thread
{
public void run()
{
for(int i=1;i<=5;i++)
{
System.out.println("\t From ThreadA: i= "+i);
}
System.out.println("Exit from A");
}
}
20
class C extends Thread
{
public void run()
{
for(int k=1;k<=5;k++)
{
System.out.println("\t From ThreadC: k= "+k);
}
class ThreadTest
{
public static void main(String args[])
{
new A().start();
new B().start();
new C().start();
}
}
21
Run 1
[raj@mundroo] threads [1:76] java ThreadTest
From ThreadA: i= 1
From ThreadA: i= 2
From ThreadA: i= 3
From ThreadA: i= 4
From ThreadA: i= 5
Exit from A
From ThreadC: k= 1
From ThreadC: k= 2
From ThreadC: k= 3
From ThreadC: k= 4
From ThreadC: k= 5
Exit from C
From ThreadB: j= 1
From ThreadB: j= 2
From ThreadB: j= 3
From ThreadB: j= 4
From ThreadB: j= 5
Exit from B
22
Run2
[raj@mundroo] threads [1:77] java ThreadTest
From ThreadA: i= 1
From ThreadA: i= 2
From ThreadA: i= 3
From ThreadA: i= 4
From ThreadA: i= 5
From ThreadC: k= 1
From ThreadC: k= 2
From ThreadC: k= 3
From ThreadC: k= 4
From ThreadC: k= 5
Exit from C
From ThreadB: j= 1
From ThreadB: j= 2
From ThreadB: j= 3
From ThreadB: j= 4
From ThreadB: j= 5
Exit from B
Exit from A
23
Process Parallelism
int add (int a, int b, int & result)
// function stuff
int sub(int a, int b, int & result) Data
// function stuff Processor
IS1 aa
add
add
pthread
bb
pthreadt1,
t1,t2;
t2;
pthread-create(&t1,
pthread-create(&t1,add,add,a,b,
a,b,&&r1);
r1); r1
r1
Processor
pthread-create(&t2,
pthread-create(&t2,sub,sub,c,d,
c,d,&&r2);
r2); cc
pthread-par
pthread-par(2,
(2,t1,
t1,t2); IS2
t2);
sub
sub
dd
r2
r2
MISD and MIMD Processing
24
Data Parallelism
sort( int *array, int count) Data
//......
Processor do
//......
“
Sort
Sort “
pthread-t,
pthread-t,thread1,
thread1,thread2;
thread2;
““ IS dn/2
““
pthread-create(&
pthread-create(&thread1,
thread1,sort,
sort,array,
array,N/2);
N/2);
pthread-create(& Processor
pthread-create(&thread2,
thread2,sort,
sort,array,
array,N/2);
N/2); dn2/+1
pthread-par(2, thread1, thread2);
pthread-par(2, thread1, thread2);
Sort
Sort “
“
SIMD Processing dn
25
Next Class
Thread Priorities
Thread Synchronisation
26
Thread Priority
In Java, each thread is assigned priority,
which affects the order in which it is
scheduled for running. The threads so far
had same default priority
(NORM_PRIORITY) and they are served
using FCFS policy.
Java allows users to change priority:
ThreadName.setPriority(intNumber)
MIN_PRIORITY = 1
NORM_PRIORITY=5
MAX_PRIORITY=10
27
Thread Priority Example
class A extends Thread
{
public void run()
{
System.out.println("Thread A started");
for(int i=1;i<=4;i++)
{
System.out.println("\t From ThreadA: i= "+i);
}
System.out.println("Exit from A");
}
}
class B extends Thread
{
public void run()
{
System.out.println("Thread B started");
for(int j=1;j<=4;j++)
{
System.out.println("\t From ThreadB: j= "+j);
}
System.out.println("Exit from B");
}
}
28
Thread Priority Example
class C extends Thread
{
public void run()
{
System.out.println("Thread C started");
for(int k=1;k<=4;k++)
{
System.out.println("\t From ThreadC: k= "+k);
}
System.out.println("Exit from C");
}
}
class ThreadPriority
{
public static void main(String args[])
{
A threadA=new A();
B threadB=new B();
C threadC=new C();
threadC.setPriority(Thread.MAX_PRIORITY);
threadB.setPriority(threadA.getPriority()+1);
threadA.setPriority(Thread.MIN_PRIORITY);
System.out.println("Started Thread A");
threadA.start();
System.out.println("Started Thread B");
threadB.start();
System.out.println("Started Thread C");
threadC.start();
System.out.println("End of main thread");
}
}
29
Accessing Shared Resources
Applications Access to Shared Resources
need to be coordinated.
Printer (two person jobs cannot be printed at
the same time)
Simultaneous operations on your bank
account.
Can the following operations be done at the
same time on the same account?
Deposit()
Withdraw()
Enquire()
30
Online Bank: Serving Many
Customers and Operations
PC client
Internet Bank
Server
Local Area Network
Bank
Database PDA
31
Shared Resources
If one thread tries to read the data and
other thread tries to update the same
date, it leads to inconsistent state.
This can be prevented by synchronising
access to the data.
Use “Synchronized” method:
public synchronized void update()
{
…
}
32
the driver: 3rd Threads
sharing the same object
class InternetBankingSystem {
public static void main(String [] args ) {
Account accountObject = new Account ();
Thread t1 = new Thread(new MyThread(accountObject));
Thread t2 = new Thread(new YourThread(accountObject));
Thread t3 = new Thread(new HerThread(accountObject));
t1.start();
t2.start();
t3.start();
// DO some other operation
} // end main()
}
33
Shared account object
between 3 threads
class MyThread implements Runnable {
Account account;
public MyThread (Account s) { account = s;}
public void run() { account.deposit(); }
} // end class MyThread
35
Multithreaded Server
Multithreaded Server
Server Process
Client
Process Server
Threads
Client Process
User Mode
Kernel Mode
Message Passing
Facility
36
Assignment 1: Multithreaded MathServer
– Demonstrate the use Sockets and
Threads
A Client
Program in “C” A Client
What is sin(10)? Program in “C++”
What is sin(10)?
37
Thread Programming
Thread concurrency/operation
models models
38
The master/worker model
Program Resources
Workers
taskX
taskX Files
Master Databases
taskY
taskY
main ( )
Input (Stream) main ( )
Disks
taskZ
taskZ
Special
Devices
39
Example
main() /* the master */
{
forever {
get a request;
switch( request )
case X: pthread_create(....,taskX);
case Y: pthread_create(....,taskY);
....
}
}
taskX() /* worker */
{
perform the task, sync if accessing shared resources
}
taskY() /* worker */
{
perform the task, sync if accessing shared resources
}
....
--Above runtime overhead of creating thread can be solved by thread pool
* the master thread creates all worker thread at program initialization
and each worker thread suspends itself immediately for a wakeup call
from the master
40
The peer model
Program Resources
Workers
Input
Input taskX
taskX Files
Databases
taskY
taskY
Disks
taskZ
taskZ
Special
Devices
41
Example
main()
{
pthread_create(....,thread1...taskX);
pthread_create(....,thread2...taskY);
....
signal all workers to start
wait for all workers to finish
do any cleanup
}
}
taskX() /* worker */
{
wait for start
perform the task, sync if accessing shared resources
}
taskY() /* worker */
{
wait for start
perform the task, sync if accessing shared resources
}
42
A thread Apipeline
thread pipeline
Input (Stream)
43
Example
main()
{
pthread_create(....,stage1);
pthread_create(....,stage2);
....
wait for all pipeline threads to finish
do any cleanup
}
stage1() {
get next input for the program
do stage 1 processing of the input
pass result to next thread in pipeline
}
stage2(){
get input from previous thread in pipeline
do stage 2 processing of the input
pass result to next thread in pipeline
}
stageN()
{
get input from previous thread in pipeline
do stage N processing of the input
pass result to program output.
}
44
Multithreading and
Multiprocessing Deployment
issues
On Shared and distributed
memory systems
45
Multithreading -
Multiprocessors
Process
Process Parallelism
Parallelism
CPU
P1
P1
P2 CPU
P2
P3 CPU
P3
tim
tim
ee
No
No of
of execution
execution process
process more
more the
the
number
number of
of CPUs
CPUs 46
Multithreading on Uni-
processor
Concurrency Vs Parallelism
Process
ProcessConcurrency
Concurrency
P1
P1
P2
P2 CPU
P3
P3
tim
tim
ee
Number
Number of
of Simultaneous
Simultaneous execution
execution units
units >
>
number
number of
of CPUs
CPUs 47
Multi-Processing (clusters &
grids) and Multi-Threaded
Computing
Threaded Libraries, Multi-threaded I/O
Application
Application Application
Application
CPU
CPU
CPU CPU CPU CPU