ITERATIVE COMPUTATIONS CONCURRENCY ID1218 Lecture 042009-11-04 Christian Schulte [email protected]...

39
ITERATIVE COMPUTATIONS CONCURRENCY ID1218 Lecture 04 2009-11-04 Christian Schulte [email protected] Software and Computer Systems School of Information and Communication Technology KTH – Royal Institute of Technology Stockholm, Sweden
  • date post

    21-Dec-2015
  • Category

    Documents

  • view

    213
  • download

    0

Transcript of ITERATIVE COMPUTATIONS CONCURRENCY ID1218 Lecture 042009-11-04 Christian Schulte [email protected]...

Page 1: ITERATIVE COMPUTATIONS CONCURRENCY ID1218 Lecture 042009-11-04 Christian Schulte cschulte@kth.se Software and Computer Systems School of Information and.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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