iterative computations concurrency id1218 lecture 042009-11-04 christian schulte [email protected]...
Post on 21-Dec-2015
214 views
TRANSCRIPT
![Page 1: ITERATIVE COMPUTATIONS CONCURRENCY ID1218 Lecture 042009-11-04 Christian Schulte cschulte@kth.se Software and Computer Systems School of Information and](https://reader030.vdocuments.site/reader030/viewer/2022032704/56649d6a5503460f94a47d3a/html5/thumbnails/1.jpg)
ITERATIVE COMPUTATIONSCONCURRENCY
ID1218 Lecture 04 2009-11-04
Christian [email protected]
Software and Computer SystemsSchool of Information and Communication
TechnologyKTH – Royal Institute of Technology
Stockholm, Sweden
![Page 2: ITERATIVE COMPUTATIONS CONCURRENCY ID1218 Lecture 042009-11-04 Christian Schulte cschulte@kth.se Software and Computer Systems School of Information and](https://reader030.vdocuments.site/reader030/viewer/2022032704/56649d6a5503460f94a47d3a/html5/thumbnails/2.jpg)
A Fourth Look
L04, 2009-11-04ID1218, Christian Schulte
2
![Page 3: ITERATIVE COMPUTATIONS CONCURRENCY ID1218 Lecture 042009-11-04 Christian Schulte cschulte@kth.se Software and Computer Systems School of Information and](https://reader030.vdocuments.site/reader030/viewer/2022032704/56649d6a5503460f94a47d3a/html5/thumbnails/3.jpg)
A Better Length?
L04, 2009-11-04ID1218, Christian Schulte
l([]) -> 0;l([_|Xr]) -> 1+l(Xr).
l([],N) -> N;l([_|Xr],N) -> l(Xr,N+1).
Two different functions: l/1 and l/2 Which one is better?
3
![Page 4: ITERATIVE COMPUTATIONS CONCURRENCY ID1218 Lecture 042009-11-04 Christian Schulte cschulte@kth.se Software and Computer Systems School of Information and](https://reader030.vdocuments.site/reader030/viewer/2022032704/56649d6a5503460f94a47d3a/html5/thumbnails/4.jpg)
Running l/1
l([1,2,3]) ; → [1,2,3]CALL(l/1) ; → CALL(l/1) ; [1,2,3]→ 1+l([2,3]) ; → 1l([2,3])ADD ; → l([2,3])ADD ; 1→ [2,3]CALL(l/1)ADD ; 1→ CALL(l/1)ADD ; [2,3]1→ 1+l([3])ADD ; 1→ 1l([3])ADDADD ; 1→ l([3])ADDADD ; 11→ …
requires stack space in the length of list
L04, 2009-11-04ID1218, Christian Schulte
4
![Page 5: ITERATIVE COMPUTATIONS CONCURRENCY ID1218 Lecture 042009-11-04 Christian Schulte cschulte@kth.se Software and Computer Systems School of Information and](https://reader030.vdocuments.site/reader030/viewer/2022032704/56649d6a5503460f94a47d3a/html5/thumbnails/5.jpg)
Running l/2
l([1,2,3],0) ; → [1,2,3]0 CALL(l/2) ; → 0 CALL(l/2) ; [1,2,3]→ CALL(l/2) ; 0[1,2,3]→ l([2,3],0+1) ; → [2,3]0+1 CALL(l/2) ; → 0+1 CALL(l/2) ; [2,3]→ 01ADDCALL(l/2) ; [2,3]→ 1ADDCALL(l/2) ; 0[2,3]→ ADDCALL(l/2) ; 10[2,3]→ CALL(l/2) ; 1[2,3]→ l([3],1+1) ; → …
requires constant stack space!
L04, 2009-11-04ID1218, Christian Schulte
5
![Page 6: ITERATIVE COMPUTATIONS CONCURRENCY ID1218 Lecture 042009-11-04 Christian Schulte cschulte@kth.se Software and Computer Systems School of Information and](https://reader030.vdocuments.site/reader030/viewer/2022032704/56649d6a5503460f94a47d3a/html5/thumbnails/6.jpg)
Appending Two Lists
L04, 2009-11-04ID1218, Christian Schulte
app([],Ys) -> Ys;app([X|Xr],Ys) -> [X|app(Xr,Ys)].
How much memory needed: easy! Stack space… in the length of the first
list CONS accumulate on the stack
6
![Page 7: ITERATIVE COMPUTATIONS CONCURRENCY ID1218 Lecture 042009-11-04 Christian Schulte cschulte@kth.se Software and Computer Systems School of Information and](https://reader030.vdocuments.site/reader030/viewer/2022032704/56649d6a5503460f94a47d3a/html5/thumbnails/7.jpg)
L04, 2009-11-04ID1218, Christian Schulte
Iterative Computations
Iterative computations run with constant stack space
Make use of last optimization call correspond to loops essentially
Tail recursive procedures are computed by iterative computations
7
![Page 8: ITERATIVE COMPUTATIONS CONCURRENCY ID1218 Lecture 042009-11-04 Christian Schulte cschulte@kth.se Software and Computer Systems School of Information and](https://reader030.vdocuments.site/reader030/viewer/2022032704/56649d6a5503460f94a47d3a/html5/thumbnails/8.jpg)
Concurrency
L04, 2009-11-04
8
ID1218, Christian Schulte
![Page 9: ITERATIVE COMPUTATIONS CONCURRENCY ID1218 Lecture 042009-11-04 Christian Schulte cschulte@kth.se Software and Computer Systems School of Information and](https://reader030.vdocuments.site/reader030/viewer/2022032704/56649d6a5503460f94a47d3a/html5/thumbnails/9.jpg)
L04, 2009-11-04ID1218, Christian Schulte
9
The World Is Concurrent!
Concurrent programsseveral activities execute simultaneously (concurrently)
Most of the software you use is concurrent
operating system: IO, user interaction, many processes, …
web browser, Email client, Email server, … telephony switches handling many calls …
![Page 10: ITERATIVE COMPUTATIONS CONCURRENCY ID1218 Lecture 042009-11-04 Christian Schulte cschulte@kth.se Software and Computer Systems School of Information and](https://reader030.vdocuments.site/reader030/viewer/2022032704/56649d6a5503460f94a47d3a/html5/thumbnails/10.jpg)
L04, 2009-11-04ID1218, Christian Schulte
10
Why Should We Care?
Software must be concurrent…… for many application areas
Concurrency can be helpful for constructing programs
organize programs into independent parts concurrency allows to make them independent
with respect to how they execute essential: how do concurrent programs
interact?
![Page 11: ITERATIVE COMPUTATIONS CONCURRENCY ID1218 Lecture 042009-11-04 Christian Schulte cschulte@kth.se Software and Computer Systems School of Information and](https://reader030.vdocuments.site/reader030/viewer/2022032704/56649d6a5503460f94a47d3a/html5/thumbnails/11.jpg)
L04, 2009-11-04ID1218, Christian Schulte
11
Concurrent Programming Is Easy…
Erlang has been designed to be very good at concurrency…
Essential for concurrent programming here
message passingvery simple interaction betweenconcurrent programs
light-weight processes no shared data structures
independence
![Page 12: ITERATIVE COMPUTATIONS CONCURRENCY ID1218 Lecture 042009-11-04 Christian Schulte cschulte@kth.se Software and Computer Systems School of Information and](https://reader030.vdocuments.site/reader030/viewer/2022032704/56649d6a5503460f94a47d3a/html5/thumbnails/12.jpg)
Concurrency in Erlang
Concurrent programs are composed of communicating processes
each process has a unique id: PID processes are spawned to execute functions send messages to PIDs receive messages messages are Erlang data structures
Erlang processes are not OS processes one Erlang OS process can host lots of Erlang
processes create by spawning they are independent of the underlying OS
L04, 2009-11-04ID1218, Christian Schulte
12
![Page 13: ITERATIVE COMPUTATIONS CONCURRENCY ID1218 Lecture 042009-11-04 Christian Schulte cschulte@kth.se Software and Computer Systems School of Information and](https://reader030.vdocuments.site/reader030/viewer/2022032704/56649d6a5503460f94a47d3a/html5/thumbnails/13.jpg)
Creating Processes
Spawning a process: takes a function as input creates a new concurrently running process
executing the function returns the PID of the newly created process
L04, 2009-11-04ID1218, Christian Schulte
13
![Page 14: ITERATIVE COMPUTATIONS CONCURRENCY ID1218 Lecture 042009-11-04 Christian Schulte cschulte@kth.se Software and Computer Systems School of Information and](https://reader030.vdocuments.site/reader030/viewer/2022032704/56649d6a5503460f94a47d3a/html5/thumbnails/14.jpg)
Our First Process
loop() -> receive kill -> io:format("Aargh: dead...~n");
Other -> io:format("Yummy: ~p~n",[Other]),
loop() end. L04, 2009-11-04ID1218, Christian Schulte
14
![Page 15: ITERATIVE COMPUTATIONS CONCURRENCY ID1218 Lecture 042009-11-04 Christian Schulte cschulte@kth.se Software and Computer Systems School of Information and](https://reader030.vdocuments.site/reader030/viewer/2022032704/56649d6a5503460f94a47d3a/html5/thumbnails/15.jpg)
Running the Process
> P=spawn(fun loop/0).<0.62.0>> P ! apple.… Yummy: apple> P ! bogey.… Yummy: bogey> P ! kill.… Aaargh: dead> P ! ham.…
L04, 2009-11-04ID1218, Christian Schulte
15
![Page 16: ITERATIVE COMPUTATIONS CONCURRENCY ID1218 Lecture 042009-11-04 Christian Schulte cschulte@kth.se Software and Computer Systems School of Information and](https://reader030.vdocuments.site/reader030/viewer/2022032704/56649d6a5503460f94a47d3a/html5/thumbnails/16.jpg)
Processes Run Forever…
Why does process not run out of memory
property of loop/0
L04, 2009-11-04ID1218, Christian Schulte
16
![Page 17: ITERATIVE COMPUTATIONS CONCURRENCY ID1218 Lecture 042009-11-04 Christian Schulte cschulte@kth.se Software and Computer Systems School of Information and](https://reader030.vdocuments.site/reader030/viewer/2022032704/56649d6a5503460f94a47d3a/html5/thumbnails/17.jpg)
Primitives
Creating processes spawn(F) for function value F spawn(M,F,As) for function F in module M
with argument list As Sending messages
PID ! message Receiving messages
receive … end with clauses Who am I?
self() returns the PID of the current process
L04, 2009-11-04ID1218, Christian Schulte
17
![Page 18: ITERATIVE COMPUTATIONS CONCURRENCY ID1218 Lecture 042009-11-04 Christian Schulte cschulte@kth.se Software and Computer Systems School of Information and](https://reader030.vdocuments.site/reader030/viewer/2022032704/56649d6a5503460f94a47d3a/html5/thumbnails/18.jpg)
Processes
Each process has a mailbox incoming messages are stored in order of
arrival sending puts message in mailbox
Processes are executed fairly if a process can receive a message or
compute……eventually, it will
It will pretty soon… Simple priorities available (low)
L04, 2009-11-04ID1218, Christian Schulte
18
![Page 19: ITERATIVE COMPUTATIONS CONCURRENCY ID1218 Lecture 042009-11-04 Christian Schulte cschulte@kth.se Software and Computer Systems School of Information and](https://reader030.vdocuments.site/reader030/viewer/2022032704/56649d6a5503460f94a47d3a/html5/thumbnails/19.jpg)
Message Sending
Message sending P ! M is asynchronous the sender does not wait until message has been
processed continues execution immediately evaluates to M
When a process sends messages M1 and M2 to same PID, they arrive in order in mailbox
FIFO ordering When a process sends messages M1 and M2
to different processes, order of arrival is undefined
L04, 2009-11-04ID1218, Christian Schulte
19
![Page 20: ITERATIVE COMPUTATIONS CONCURRENCY ID1218 Lecture 042009-11-04 Christian Schulte cschulte@kth.se Software and Computer Systems School of Information and](https://reader030.vdocuments.site/reader030/viewer/2022032704/56649d6a5503460f94a47d3a/html5/thumbnails/20.jpg)
Message Receipt
Only receive inspects mailbox all messages are put into the mailbox
Messages are processed in order of arrival that is, receive processes mailbox in order
If the receive statement has a matching clause for the first message
remove message and execute clause always choose the first matching clause
Otherwise, continue with next message Unmatched messages are kept in original
orderL04, 2009-11-04ID1218, Christian Schulte
20
![Page 21: ITERATIVE COMPUTATIONS CONCURRENCY ID1218 Lecture 042009-11-04 Christian Schulte cschulte@kth.se Software and Computer Systems School of Information and](https://reader030.vdocuments.site/reader030/viewer/2022032704/56649d6a5503460f94a47d3a/html5/thumbnails/21.jpg)
Receive Example
1. receive c -> … end2. receive d -> …; b -> … end3. receive M -> … end
L04, 2009-11-04ID1218, Christian Schulte
21
a
b
c
d
a
b
d
a
d
dmailbox head
1. 2. 3.
![Page 22: ITERATIVE COMPUTATIONS CONCURRENCY ID1218 Lecture 042009-11-04 Christian Schulte cschulte@kth.se Software and Computer Systems School of Information and](https://reader030.vdocuments.site/reader030/viewer/2022032704/56649d6a5503460f94a47d3a/html5/thumbnails/22.jpg)
Receiving Multiple Messagesseq() -> receive a -> receive b -> … end; c -> … end. With other words: processes can use different receive
statements What does it mean
is a sent before b? is a received before b?
L04, 2009-11-04ID1218, Christian Schulte
22
![Page 23: ITERATIVE COMPUTATIONS CONCURRENCY ID1218 Lecture 042009-11-04 Christian Schulte cschulte@kth.se Software and Computer Systems School of Information and](https://reader030.vdocuments.site/reader030/viewer/2022032704/56649d6a5503460f94a47d3a/html5/thumbnails/23.jpg)
Receive With Timeouts
receive …after Time -> Exprend If no matching message arrived within Time milliseconds, evaluate Expr
If only after clause present, process sleeps for Time milliseconds
L04, 2009-11-04ID1218, Christian Schulte
23
![Page 24: ITERATIVE COMPUTATIONS CONCURRENCY ID1218 Lecture 042009-11-04 Christian Schulte cschulte@kth.se Software and Computer Systems School of Information and](https://reader030.vdocuments.site/reader030/viewer/2022032704/56649d6a5503460f94a47d3a/html5/thumbnails/24.jpg)
Flushing the Mailbox
flush() -> receive _ -> flush() after 0 -> true end.
L04, 2009-11-04ID1218, Christian Schulte
24
![Page 25: ITERATIVE COMPUTATIONS CONCURRENCY ID1218 Lecture 042009-11-04 Christian Schulte cschulte@kth.se Software and Computer Systems School of Information and](https://reader030.vdocuments.site/reader030/viewer/2022032704/56649d6a5503460f94a47d3a/html5/thumbnails/25.jpg)
Priority Receipt
priority() -> receive alarm -> … after 0 -> receive M -> …, priority() end end.
L04, 2009-11-04ID1218, Christian Schulte
25
![Page 26: ITERATIVE COMPUTATIONS CONCURRENCY ID1218 Lecture 042009-11-04 Christian Schulte cschulte@kth.se Software and Computer Systems School of Information and](https://reader030.vdocuments.site/reader030/viewer/2022032704/56649d6a5503460f94a47d3a/html5/thumbnails/26.jpg)
Timed Repeater
start(T,F) -> spawn(fun() -> rep(T,F) end).stop(PID) -> PID ! stop.
rep(T,F) -> receive stop -> true after T -> F(), rep(T,F) end.
L04, 2009-11-04ID1218, Christian Schulte
26
![Page 27: ITERATIVE COMPUTATIONS CONCURRENCY ID1218 Lecture 042009-11-04 Christian Schulte cschulte@kth.se Software and Computer Systems School of Information and](https://reader030.vdocuments.site/reader030/viewer/2022032704/56649d6a5503460f94a47d3a/html5/thumbnails/27.jpg)
Different Message Types
receive {a, … } -> … ; {b, … } -> … …end
Use tuples as messages first field of tuple describes message type
L04, 2009-11-04ID1218, Christian Schulte
27
![Page 28: ITERATIVE COMPUTATIONS CONCURRENCY ID1218 Lecture 042009-11-04 Christian Schulte cschulte@kth.se Software and Computer Systems School of Information and](https://reader030.vdocuments.site/reader030/viewer/2022032704/56649d6a5503460f94a47d3a/html5/thumbnails/28.jpg)
Client Server Architectures
L04, 2009-11-04
28
ID1218, Christian Schulte
![Page 29: ITERATIVE COMPUTATIONS CONCURRENCY ID1218 Lecture 042009-11-04 Christian Schulte cschulte@kth.se Software and Computer Systems School of Information and](https://reader030.vdocuments.site/reader030/viewer/2022032704/56649d6a5503460f94a47d3a/html5/thumbnails/29.jpg)
Client Server
Single server processing requests wait for request perform request reply to request (ok or result)
Multiple clients sending requests send request wait for reply
Very common architecture WWW, RPC, RMI, … example: RPC
L04, 2009-11-04ID1218, Christian Schulte
29
![Page 30: ITERATIVE COMPUTATIONS CONCURRENCY ID1218 Lecture 042009-11-04 Christian Schulte cschulte@kth.se Software and Computer Systems School of Information and](https://reader030.vdocuments.site/reader030/viewer/2022032704/56649d6a5503460f94a47d3a/html5/thumbnails/30.jpg)
How to Reply: RPC
Server must know how to reply to client client sends request…
…plus its own PID PID of process available via self()
After server has fulfilled request sends back reply to sender's PID
RPC is synchronous client must wait until reply received
L04, 2009-11-04ID1218, Christian Schulte
30
![Page 31: ITERATIVE COMPUTATIONS CONCURRENCY ID1218 Lecture 042009-11-04 Christian Schulte cschulte@kth.se Software and Computer Systems School of Information and](https://reader030.vdocuments.site/reader030/viewer/2022032704/56649d6a5503460f94a47d3a/html5/thumbnails/31.jpg)
RPC Server
serve() -> receive {Client,Request} -> Response = process(Request), Client ! Response, serve() end.
L04, 2009-11-04ID1218, Christian Schulte
31
![Page 32: ITERATIVE COMPUTATIONS CONCURRENCY ID1218 Lecture 042009-11-04 Christian Schulte cschulte@kth.se Software and Computer Systems School of Information and](https://reader030.vdocuments.site/reader030/viewer/2022032704/56649d6a5503460f94a47d3a/html5/thumbnails/32.jpg)
RPC Client
rpc(Server,Request) -> Server ! {self(), Request}, receive Response -> Response end. This is easy… but wrong…
assumption: first message in mailbox is from server
but: can be from anybody!
L04, 2009-11-04ID1218, Christian Schulte
32
![Page 33: ITERATIVE COMPUTATIONS CONCURRENCY ID1218 Lecture 042009-11-04 Christian Schulte cschulte@kth.se Software and Computer Systems School of Information and](https://reader030.vdocuments.site/reader030/viewer/2022032704/56649d6a5503460f94a47d3a/html5/thumbnails/33.jpg)
Who Talks To Me?
If we only want to receive messages from process PID, messages must include PID
SendingP ! {self(), … }
ReceiptPID= …,receive {P,…} when P==PID -> …end
L04, 2009-11-04ID1218, Christian Schulte
33
![Page 34: ITERATIVE COMPUTATIONS CONCURRENCY ID1218 Lecture 042009-11-04 Christian Schulte cschulte@kth.se Software and Computer Systems School of Information and](https://reader030.vdocuments.site/reader030/viewer/2022032704/56649d6a5503460f94a47d3a/html5/thumbnails/34.jpg)
Scoping in Patterns Revisited The following
PID= …,receive {P,…} when P==PID -> … end
can be rewritten toPID= …,receive {PID,…} -> …end
Variables already introduced are not pattern variables but the values they are assigned to
whoa, this is ugly (my personal taste)
L04, 2009-11-04ID1218, Christian Schulte
34
![Page 35: ITERATIVE COMPUTATIONS CONCURRENCY ID1218 Lecture 042009-11-04 Christian Schulte cschulte@kth.se Software and Computer Systems School of Information and](https://reader030.vdocuments.site/reader030/viewer/2022032704/56649d6a5503460f94a47d3a/html5/thumbnails/35.jpg)
A Working RPC Client
rpc(Server,Request) -> Server ! {self(),Request}, receive {Server,Response} -> Response end. This is still easy… but correct…
but why: there can only be one pending reply not so easy to see
L04, 2009-11-04ID1218, Christian Schulte
35
![Page 36: ITERATIVE COMPUTATIONS CONCURRENCY ID1218 Lecture 042009-11-04 Christian Schulte cschulte@kth.se Software and Computer Systems School of Information and](https://reader030.vdocuments.site/reader030/viewer/2022032704/56649d6a5503460f94a47d3a/html5/thumbnails/36.jpg)
The Registry
Register processes under names (atoms) for example: clock, logger, …
Operations register(Name,Pid) unregister(Name) whereis(Name) returns PID or undefined registered() returns all registered names
Exampleregister(a,PID), a ! M
As always: the registry is scary…L04, 2009-11-04ID1218, Christian Schulte
36
![Page 37: ITERATIVE COMPUTATIONS CONCURRENCY ID1218 Lecture 042009-11-04 Christian Schulte cschulte@kth.se Software and Computer Systems School of Information and](https://reader030.vdocuments.site/reader030/viewer/2022032704/56649d6a5503460f94a47d3a/html5/thumbnails/37.jpg)
Summary & Outlook
L04, 2009-11-04
37
ID1218, Christian Schulte
![Page 38: ITERATIVE COMPUTATIONS CONCURRENCY ID1218 Lecture 042009-11-04 Christian Schulte cschulte@kth.se Software and Computer Systems School of Information and](https://reader030.vdocuments.site/reader030/viewer/2022032704/56649d6a5503460f94a47d3a/html5/thumbnails/38.jpg)
Summary: Concurrency
Processes communicate by message sending
feature ordered mailbox execute selective receive statements messages buffered until removed by receive are scheduled fairly can use timeouts
Simple concurrency pattern client – server request – reply
L04, 2009-11-04ID1218, Christian Schulte
38
![Page 39: ITERATIVE COMPUTATIONS CONCURRENCY ID1218 Lecture 042009-11-04 Christian Schulte cschulte@kth.se Software and Computer Systems School of Information and](https://reader030.vdocuments.site/reader030/viewer/2022032704/56649d6a5503460f94a47d3a/html5/thumbnails/39.jpg)
Outlook: L05
How can concurrent computations synchronize with each other cooperate
What are the properties of programs with and without
message sending and message receipt
L04, 2009-11-04ID1218, Christian Schulte
39