alexandre david 1.2.05...
TRANSCRIPT
![Page 2: Alexandre David 1.2.05 adavid@cs.aaupeople.cs.aau.dk/~adavid/teaching/TSW-10/07-lect08-chap04.pdf · Java Class Thread methods run(), start(), isAlive(), join()… and interface Runnable](https://reader034.vdocuments.us/reader034/viewer/2022042809/5f8e548b7e0132625033efa2/html5/thumbnails/2.jpg)
05-10-2010 TSW'10 2
DisclaimerOverlap with PSS
ThreadsProcessesScheduling
Overlap with MVPParallelismThread programmingSynchronization
But good summary of concepts in a practical context.
![Page 3: Alexandre David 1.2.05 adavid@cs.aaupeople.cs.aau.dk/~adavid/teaching/TSW-10/07-lect08-chap04.pdf · Java Class Thread methods run(), start(), isAlive(), join()… and interface Runnable](https://reader034.vdocuments.us/reader034/viewer/2022042809/5f8e548b7e0132625033efa2/html5/thumbnails/3.jpg)
05-10-2010 TSW'10 3
Disclaimer’The ADA examples are irrelevant w.r.t. the language itself.
⇒ Extract general concepts and constructs.⇒ Map them to different languages.
We are not ADA experts and we do not need to be.
![Page 4: Alexandre David 1.2.05 adavid@cs.aaupeople.cs.aau.dk/~adavid/teaching/TSW-10/07-lect08-chap04.pdf · Java Class Thread methods run(), start(), isAlive(), join()… and interface Runnable](https://reader034.vdocuments.us/reader034/viewer/2022042809/5f8e548b7e0132625033efa2/html5/thumbnails/4.jpg)
05-10-2010 TSW'10 4
OverviewIntroduction to concurrent programs.
Amdahl’s law.
Tasks & task support.Examples.
![Page 5: Alexandre David 1.2.05 adavid@cs.aaupeople.cs.aau.dk/~adavid/teaching/TSW-10/07-lect08-chap04.pdf · Java Class Thread methods run(), start(), isAlive(), join()… and interface Runnable](https://reader034.vdocuments.us/reader034/viewer/2022042809/5f8e548b7e0132625033efa2/html5/thumbnails/5.jpg)
05-10-2010 TSW'10 5
Why concurrent programming?Natural parallelism in real-world.
Reflect inherent parallelism of systems.
Use more efficiently processors.CPU speeds >> input/output: busy wait, polling, or blocking are not good.
Parallel computations.The speed of light + heat limit processor speeds.The catch: Amdahl’s law.
![Page 6: Alexandre David 1.2.05 adavid@cs.aaupeople.cs.aau.dk/~adavid/teaching/TSW-10/07-lect08-chap04.pdf · Java Class Thread methods run(), start(), isAlive(), join()… and interface Runnable](https://reader034.vdocuments.us/reader034/viewer/2022042809/5f8e548b7e0132625033efa2/html5/thumbnails/6.jpg)
05-10-2010 TSW'10 6
Amdahl’s lawInherent sequential costs will limit speedup.
If a problem of size W has a serialcomponent WS then the speedupS≤W/WS for any p.
Size W corresponds to the serial execution time.TP=serial part+(non-serial part)/pS=TS/TP=W/(WS+(W-WS)/p) ≤ W/WS.
For WS=(1-P)W we have S≤1/(1-P)
Note: Problem size here = execution time to abstractfrom particular problem complexities.
![Page 7: Alexandre David 1.2.05 adavid@cs.aaupeople.cs.aau.dk/~adavid/teaching/TSW-10/07-lect08-chap04.pdf · Java Class Thread methods run(), start(), isAlive(), join()… and interface Runnable](https://reader034.vdocuments.us/reader034/viewer/2022042809/5f8e548b7e0132625033efa2/html5/thumbnails/7.jpg)
05-10-2010 TSW'10 7
Processes/Threads/TasksProcess = program + context + memory space.
Thread = program + parent (shared) memory space + private stack.
Task: Abstraction on OS and execution means.
Program/procedure.
OS/platform view
Logical view
![Page 8: Alexandre David 1.2.05 adavid@cs.aaupeople.cs.aau.dk/~adavid/teaching/TSW-10/07-lect08-chap04.pdf · Java Class Thread methods run(), start(), isAlive(), join()… and interface Runnable](https://reader034.vdocuments.us/reader034/viewer/2022042809/5f8e548b7e0132625033efa2/html5/thumbnails/8.jpg)
05-10-2010 TSW'10 8
Processes/Threads/TasksDO NOT CONSIDER TASKS=THREADS like the book is suggesting.Reasoning at the task level is better.
Better granularity.Logical view.Abstraction from the platform.Up to a library/language to map tasks to threads.See Intel’s Threading Building Blocks, nice read.
![Page 9: Alexandre David 1.2.05 adavid@cs.aaupeople.cs.aau.dk/~adavid/teaching/TSW-10/07-lect08-chap04.pdf · Java Class Thread methods run(), start(), isAlive(), join()… and interface Runnable](https://reader034.vdocuments.us/reader034/viewer/2022042809/5f8e548b7e0132625033efa2/html5/thumbnails/9.jpg)
05-10-2010 TSW'10 9
So how do we do it?MVP main topic.Hints here:
Decompose problems into tasks.Run tasks in parallel.Synchronize tasks whenever needed.Be careful with shared resources.
![Page 10: Alexandre David 1.2.05 adavid@cs.aaupeople.cs.aau.dk/~adavid/teaching/TSW-10/07-lect08-chap04.pdf · Java Class Thread methods run(), start(), isAlive(), join()… and interface Runnable](https://reader034.vdocuments.us/reader034/viewer/2022042809/5f8e548b7e0132625033efa2/html5/thumbnails/10.jpg)
05-10-2010 TSW'10 10
TerminologyA concurrent program is a collection of autonomous sequential tasks, executing (logically) in parallel.
Each task is mapped to a single thread.One thread may execute several tasks.
Possible execution:Tasks run on one processors (multiprogramming).Tasks run on an SMP machine (multiprocessing).Tasks run on different machines (distributed processing).
![Page 11: Alexandre David 1.2.05 adavid@cs.aaupeople.cs.aau.dk/~adavid/teaching/TSW-10/07-lect08-chap04.pdf · Java Class Thread methods run(), start(), isAlive(), join()… and interface Runnable](https://reader034.vdocuments.us/reader034/viewer/2022042809/5f8e548b7e0132625033efa2/html5/thumbnails/11.jpg)
05-10-2010 TSW'10 11
Created
Non-existing
Initializing
Executable
Terminated
Task StatesSimplified.Abstract running,blocked, suspended...Programmer’s view.
![Page 12: Alexandre David 1.2.05 adavid@cs.aaupeople.cs.aau.dk/~adavid/teaching/TSW-10/07-lect08-chap04.pdf · Java Class Thread methods run(), start(), isAlive(), join()… and interface Runnable](https://reader034.vdocuments.us/reader034/viewer/2022042809/5f8e548b7e0132625033efa2/html5/thumbnails/12.jpg)
05-10-2010 TSW'10 12
Support for parallelismLibrary level
C/C++, pthreads.
Language levelJava/ADA, language threads.
Different structures: static/dynamic.Different levels: flat/nested.
![Page 13: Alexandre David 1.2.05 adavid@cs.aaupeople.cs.aau.dk/~adavid/teaching/TSW-10/07-lect08-chap04.pdf · Java Class Thread methods run(), start(), isAlive(), join()… and interface Runnable](https://reader034.vdocuments.us/reader034/viewer/2022042809/5f8e548b7e0132625033efa2/html5/thumbnails/13.jpg)
05-10-2010 TSW'10 13
What you can doStart tasks (or threads).Synchronize tasks
semaphores, mutex, condition variables.Use inter-process communication (IPC)
message passing, pipes, shared memory.Stop tasks.
Exception, exit, cancel, never.
Constraints: dependencies (task dependency graph), shared resources (exclusive access).
![Page 14: Alexandre David 1.2.05 adavid@cs.aaupeople.cs.aau.dk/~adavid/teaching/TSW-10/07-lect08-chap04.pdf · Java Class Thread methods run(), start(), isAlive(), join()… and interface Runnable](https://reader034.vdocuments.us/reader034/viewer/2022042809/5f8e548b7e0132625033efa2/html5/thumbnails/14.jpg)
05-10-2010 TSW'10 14
Nested tasksHierarchies of tasks.Relationship:
Parent/child tasks.Guardian/dependent: Logical block entered by the guardian (parent) that creates tasks (children).
The guardian may exit the block when all dependent have terminated.Structure: fork()…wait() or create_thread()…join().
![Page 15: Alexandre David 1.2.05 adavid@cs.aaupeople.cs.aau.dk/~adavid/teaching/TSW-10/07-lect08-chap04.pdf · Java Class Thread methods run(), start(), isAlive(), join()… and interface Runnable](https://reader034.vdocuments.us/reader034/viewer/2022042809/5f8e548b7e0132625033efa2/html5/thumbnails/15.jpg)
05-10-2010 TSW'10 15
Task representationFork & joincobegintask declaration
![Page 16: Alexandre David 1.2.05 adavid@cs.aaupeople.cs.aau.dk/~adavid/teaching/TSW-10/07-lect08-chap04.pdf · Java Class Thread methods run(), start(), isAlive(), join()… and interface Runnable](https://reader034.vdocuments.us/reader034/viewer/2022042809/5f8e548b7e0132625033efa2/html5/thumbnails/16.jpg)
05-10-2010 TSW'10 16
Fork & join concepts
fork
join
join
Parent calls join 1st. Child finishes 1st.
map to…
![Page 17: Alexandre David 1.2.05 adavid@cs.aaupeople.cs.aau.dk/~adavid/teaching/TSW-10/07-lect08-chap04.pdf · Java Class Thread methods run(), start(), isAlive(), join()… and interface Runnable](https://reader034.vdocuments.us/reader034/viewer/2022042809/5f8e548b7e0132625033efa2/html5/thumbnails/17.jpg)
05-10-2010 TSW'10 17
Cobegin concept
cobeginstatement;statement;…
coend
![Page 18: Alexandre David 1.2.05 adavid@cs.aaupeople.cs.aau.dk/~adavid/teaching/TSW-10/07-lect08-chap04.pdf · Java Class Thread methods run(), start(), isAlive(), join()… and interface Runnable](https://reader034.vdocuments.us/reader034/viewer/2022042809/5f8e548b7e0132625033efa2/html5/thumbnails/18.jpg)
05-10-2010 TSW'10 18
Task declarationExplicit declaration of tasks.
Task A() {…} Task B() {…}Main program setups parameters (periods) and enters a loop – may listen to events there.
![Page 19: Alexandre David 1.2.05 adavid@cs.aaupeople.cs.aau.dk/~adavid/teaching/TSW-10/07-lect08-chap04.pdf · Java Class Thread methods run(), start(), isAlive(), join()… and interface Runnable](https://reader034.vdocuments.us/reader034/viewer/2022042809/5f8e548b7e0132625033efa2/html5/thumbnails/19.jpg)
05-10-2010 TSW'10 19
Language vs. OS supported concurrency
+ language+readable +maintainable programs≠ types of OS, same lang. → +portable programspossible to have no OS
- languageModels of concurrency are language specific→ delicate to mix ≠ languages.May be difficult to implement efficiently the language model of concurrency of top of an OS.POSIX standard for OS API, better portability.
![Page 20: Alexandre David 1.2.05 adavid@cs.aaupeople.cs.aau.dk/~adavid/teaching/TSW-10/07-lect08-chap04.pdf · Java Class Thread methods run(), start(), isAlive(), join()… and interface Runnable](https://reader034.vdocuments.us/reader034/viewer/2022042809/5f8e548b7e0132625033efa2/html5/thumbnails/20.jpg)
05-10-2010 TSW'10 20
AdaUnit of concurrency = task.
Explicitely declared.Created implicitly.
Tasks communicate & synchronize viarendezvous (~sync message passing)protected units (~monitor, condition variable)shared variables
![Page 21: Alexandre David 1.2.05 adavid@cs.aaupeople.cs.aau.dk/~adavid/teaching/TSW-10/07-lect08-chap04.pdf · Java Class Thread methods run(), start(), isAlive(), join()… and interface Runnable](https://reader034.vdocuments.us/reader034/viewer/2022042809/5f8e548b7e0132625033efa2/html5/thumbnails/21.jpg)
05-10-2010 TSW'10 21
Example Task Structuretask type Server (Init : Parameter) isentry Service;
end Server;
specification
body
task body Server is
begin...
accept Service do
-- Sequence of statements;
end Service;...
end Server;
![Page 22: Alexandre David 1.2.05 adavid@cs.aaupeople.cs.aau.dk/~adavid/teaching/TSW-10/07-lect08-chap04.pdf · Java Class Thread methods run(), start(), isAlive(), join()… and interface Runnable](https://reader034.vdocuments.us/reader034/viewer/2022042809/5f8e548b7e0132625033efa2/html5/thumbnails/22.jpg)
05-10-2010 TSW'10 22
Activation, Execution, & Finalization
Activation: task declaration, allocation of variables, creation of the task (~constructor).
Execution: execute statements in the body.
Finalization: execute finalization code associated with declared objects (~destructor).
![Page 23: Alexandre David 1.2.05 adavid@cs.aaupeople.cs.aau.dk/~adavid/teaching/TSW-10/07-lect08-chap04.pdf · Java Class Thread methods run(), start(), isAlive(), join()… and interface Runnable](https://reader034.vdocuments.us/reader034/viewer/2022042809/5f8e548b7e0132625033efa2/html5/thumbnails/23.jpg)
05-10-2010 TSW'10 23
Task states in Adanon-existing
created
activating
executable
terminated
finalizing
completed
elaboration ofdeclarative part
elaborationsuccessful
activationsuccessful
completion oftask body
exceptionraised
exceptionraised
![Page 24: Alexandre David 1.2.05 adavid@cs.aaupeople.cs.aau.dk/~adavid/teaching/TSW-10/07-lect08-chap04.pdf · Java Class Thread methods run(), start(), isAlive(), join()… and interface Runnable](https://reader034.vdocuments.us/reader034/viewer/2022042809/5f8e548b7e0132625033efa2/html5/thumbnails/24.jpg)
05-10-2010 TSW'10 24
Task IdentificationType in Ada.Integer in C (process ID) or type (pthread_t).Reference to Thread in Java.Way to identify a task to
communicatewait for itcancel it.
![Page 25: Alexandre David 1.2.05 adavid@cs.aaupeople.cs.aau.dk/~adavid/teaching/TSW-10/07-lect08-chap04.pdf · Java Class Thread methods run(), start(), isAlive(), join()… and interface Runnable](https://reader034.vdocuments.us/reader034/viewer/2022042809/5f8e548b7e0132625033efa2/html5/thumbnails/25.jpg)
05-10-2010 TSW'10 25
JavaClass Thread
methods run(), start(), isAlive(), join()…and interface Runnable.public interface Runnable {
public abstract void run();}Running object is Thread so you can either
extend Thread, orimplement Runnable and create new Thread(runMe).
Interface is there to avoid extending Thread (single inheritance in Java).
![Page 26: Alexandre David 1.2.05 adavid@cs.aaupeople.cs.aau.dk/~adavid/teaching/TSW-10/07-lect08-chap04.pdf · Java Class Thread methods run(), start(), isAlive(), join()… and interface Runnable](https://reader034.vdocuments.us/reader034/viewer/2022042809/5f8e548b7e0132625033efa2/html5/thumbnails/26.jpg)
05-10-2010 TSW'10 26
Java threadsDynamic thread creation.Pass any data to constructor.Thread groups (no master/guardian).Main program terminates when all threads terminate.One thread can wait for another by calling its join().Some thread specific exception.
![Page 27: Alexandre David 1.2.05 adavid@cs.aaupeople.cs.aau.dk/~adavid/teaching/TSW-10/07-lect08-chap04.pdf · Java Class Thread methods run(), start(), isAlive(), join()… and interface Runnable](https://reader034.vdocuments.us/reader034/viewer/2022042809/5f8e548b7e0132625033efa2/html5/thumbnails/27.jpg)
05-10-2010 TSW'10 27
POSIXProcess
fork(): copies current process (everything).
Threadpthread_create(): create a thread in the address space of its parent process.
Mutex, condition variable, and semaphores.Shared memory
threads share the same address space orprocess can allocate shared memory.
![Page 28: Alexandre David 1.2.05 adavid@cs.aaupeople.cs.aau.dk/~adavid/teaching/TSW-10/07-lect08-chap04.pdf · Java Class Thread methods run(), start(), isAlive(), join()… and interface Runnable](https://reader034.vdocuments.us/reader034/viewer/2022042809/5f8e548b7e0132625033efa2/html5/thumbnails/28.jpg)
05-10-2010 TSW'10 28
SummaryConcurrency important:
Real-world inherently concurrent.Support by OS or language (better).Modeled as tasks.
States.
Variations in the task model, different mapping to different languages.
static/dynamic, flat/nested, fine/coarse,how to terminate,how to declare/create (fork, join, cobegin, explicit declaration).