COMP31212: Concurrency Topics 4.3: Message Passing Topic 4.3: - - PowerPoint PPT Presentation

comp31212 concurrency
SMART_READER_LITE
LIVE PREVIEW

COMP31212: Concurrency Topics 4.3: Message Passing Topic 4.3: - - PowerPoint PPT Presentation

Topic 4.3: Message Passing COMP31212: Concurrency Topics 4.3: Message Passing Topic 4.3: Message Passing Outline Topic 4.3: Message Passing Background Synchronous Message Passing Asynchronous Message Passing Channel Selection Topic 4.3:


slide-1
SLIDE 1

Topic 4.3: Message Passing

COMP31212: Concurrency

Topics 4.3: Message Passing

slide-2
SLIDE 2

Topic 4.3: Message Passing

Outline

Topic 4.3: Message Passing Background Synchronous Message Passing Asynchronous Message Passing Channel Selection

slide-3
SLIDE 3

Topic 4.3: Message Passing

Outline

Topic 4.3: Message Passing Background Synchronous Message Passing Asynchronous Message Passing Channel Selection

slide-4
SLIDE 4

Topic 4.3: Message Passing

The Message Passing Paradigm

  • processes send and receive messages via channels
slide-5
SLIDE 5

Topic 4.3: Message Passing

The Message Passing Paradigm

  • processes send and receive messages via channels
  • no need for shared memory (i.e. for shared variables)
slide-6
SLIDE 6

Topic 4.3: Message Passing

The Message Passing Paradigm

  • processes send and receive messages via channels
  • no need for shared memory (i.e. for shared variables)
  • distributed computation possible
slide-7
SLIDE 7

Topic 4.3: Message Passing

The Message Passing Paradigm

  • processes send and receive messages via channels
  • no need for shared memory (i.e. for shared variables)
  • distributed computation possible
  • point-to-point, one-to-many (sender/receiver), many-to-one,

(even many-to-many?!)

slide-8
SLIDE 8

Topic 4.3: Message Passing

Outline

Topic 4.3: Message Passing Background Synchronous Message Passing Asynchronous Message Passing Channel Selection

slide-9
SLIDE 9

Topic 4.3: Message Passing

Synchronous Message Passing — SMP

  • assume one sender, one receiver
slide-10
SLIDE 10

Topic 4.3: Message Passing

Synchronous Message Passing — SMP

  • assume one sender, one receiver
  • Port ch = new Port()
slide-11
SLIDE 11

Topic 4.3: Message Passing

Synchronous Message Passing — SMP

  • assume one sender, one receiver
  • Port ch = new Port()
  • void send(Port ch, Message msg)
slide-12
SLIDE 12

Topic 4.3: Message Passing

Synchronous Message Passing — SMP

  • assume one sender, one receiver
  • Port ch = new Port()
  • void send(Port ch, Message msg)
  • Message receive(Port ch)
slide-13
SLIDE 13

Topic 4.3: Message Passing

Synchronous Message Passing — SMP

  • assume one sender, one receiver
  • Port ch = new Port()
  • void send(Port ch, Message msg)
  • Message receive(Port ch)
  • receiver process blocks until message is sent on channel
slide-14
SLIDE 14

Topic 4.3: Message Passing

Synchronous Message Passing — SMP

  • assume one sender, one receiver
  • Port ch = new Port()
  • void send(Port ch, Message msg)
  • Message receive(Port ch)
  • receiver process blocks until message is sent on channel
  • sender process blocks until message is received on channel
slide-15
SLIDE 15

Topic 4.3: Message Passing

Synchronous Message Passing — SMP

  • assume one sender, one receiver
  • Port ch = new Port()
  • void send(Port ch, Message msg)
  • Message receive(Port ch)
  • receiver process blocks until message is sent on channel
  • sender process blocks until message is received on channel
  • i.e. synchronisation between sender/receiver processes
slide-16
SLIDE 16

Topic 4.3: Message Passing

An FSP Model for SMP

range Message = 0..9 SENDER = SEND[0], SEND[msg: Message] = (send[msg] -> SEND[(msg+1)%10]). RECEIVER = (receive[msg: Message] -> RECEIVER). ||SYS0 = (SENDER || RECEIVER)/{chan1/receive,chan1/send}.

slide-17
SLIDE 17

Topic 4.3: Message Passing

||SYS1 = ( SENDER/{chan1/send} || RECEIVER/{chan1/receive} ). ||SYS2 = ( SENDER/{chan1/send} || RECEIVER/{chan1/receive} || SENDER/{chan2/send} || RECEIVER/{chan2/receive} ).

slide-18
SLIDE 18

Topic 4.3: Message Passing

Message Sequencing

slide-19
SLIDE 19

Topic 4.3: Message Passing

Synchronous Message Passing in Java

public class Channel { Object chan = null; int ready = 0; public synchronized void send(Object v) throws InterruptedException { chan = v; ++ready; notifyAll(); while (chan != null) wait(); }

slide-20
SLIDE 20

Topic 4.3: Message Passing

public synchronized Object receive() throws InterruptedException { while(ready==0) wait();

  • -ready;

Object tmp = chan; chan = null; notifyAll(); return(tmp); }}

slide-21
SLIDE 21

Topic 4.3: Message Passing

Outline

Topic 4.3: Message Passing Background Synchronous Message Passing Asynchronous Message Passing Channel Selection

slide-22
SLIDE 22

Topic 4.3: Message Passing

Asynchronous Message Passing

  • assume many senders, one receiver
slide-23
SLIDE 23

Topic 4.3: Message Passing

Asynchronous Message Passing

  • assume many senders, one receiver
  • Port ch = new Port()
slide-24
SLIDE 24

Topic 4.3: Message Passing

Asynchronous Message Passing

  • assume many senders, one receiver
  • Port ch = new Port()
  • void send(Port ch, Message msg)
slide-25
SLIDE 25

Topic 4.3: Message Passing

Asynchronous Message Passing

  • assume many senders, one receiver
  • Port ch = new Port()
  • void send(Port ch, Message msg)
  • Message receive(Port ch)
slide-26
SLIDE 26

Topic 4.3: Message Passing

Asynchronous Message Passing

  • assume many senders, one receiver
  • Port ch = new Port()
  • void send(Port ch, Message msg)
  • Message receive(Port ch)
  • receiver process blocks unless a message is queued at port
slide-27
SLIDE 27

Topic 4.3: Message Passing

Asynchronous Message Passing

  • assume many senders, one receiver
  • Port ch = new Port()
  • void send(Port ch, Message msg)
  • Message receive(Port ch)
  • receiver process blocks unless a message is queued at port
  • sender process continues execution as soon as message is sent
slide-28
SLIDE 28

Topic 4.3: Message Passing

Modelling Asynchronous Message Passing

What we would like to do. . . pseudo-FSP with infinite lists and data:

set Message = Integer PORT = PORT[[]], PORT[[]] = ( send[msg: Message] -> PORT[msg] ), PORT[(hd::tl): Message List] = ( send[msg: Message] -> PORT[(hd::tl) @ [msg]] || receive[hd] -> PORT[tl] ).

slide-29
SLIDE 29

Topic 4.3: Message Passing

In FSP ...

As usual, in practice. . . must use finite lists with restricted data:

range Message = 0..3 set S = {[Message], [Message][Message]} PORT = ( send[msg: Message] -> PORT[msg] ), PORT[hd: Message] = ( send[msg: Message] -> PORT[hd][msg] | receive[hd] -> PORT ), PORT[hd: Message][tl: S] = ( send[msg: Message] -> PORT[hd][tl][msg] | receive[hd] -> PORT[tl] ).

slide-30
SLIDE 30

Topic 4.3: Message Passing

. . . or even abstract away from data altogether:

PORT = PORT[0], PORT[i:Int] = ( send -> PORT[i+1] | when (i>0) receive -> PORT[i-1]). SENDER = (send -> SENDER). RECEIVER = (receive -> RECEIVER). ||SYS = ( {s[1..2]}::PORT || s[1..2]:SENDER || RECEIVER )/{receive/s[1..2].receive }.

slide-31
SLIDE 31

Topic 4.3: Message Passing

Asynchronous Message Passing in Java

class Port { Vector queue = new Vector(); public synchronized void send(Object v) { queue.addElement(v); ++ready; notifyAll(); }

slide-32
SLIDE 32

Topic 4.3: Message Passing

public synchronized Object receive() throws InterruptedException { while(ready==0) wait();

  • -ready;

Object tmp = queue.elementAt(0); queue.removeElementAt(0); return(tmp); }}

slide-33
SLIDE 33

Topic 4.3: Message Passing

Outline

Topic 4.3: Message Passing Background Synchronous Message Passing Asynchronous Message Passing Channel Selection

slide-34
SLIDE 34

Topic 4.3: Message Passing

Selecting Channels - I

SELECT = ( when (guard1) receive1[v1:Message] -> P1[v1] | when (guard2) receive2[v2:Message] -> P2[v2] ... | when (guardN) receiveN[vN:Message] -> PN[vN]). SENDER1 = (send1[e1] -> SENDER1). ... SENDERN = (sendN[eN] -> SENDERN). ||SYS = ( SELECT/{chan1/receive1,...,chanN/receiveN} || SENDER1/{chan1/send1} ... || SENDERN/{chanN/sendN} ).

slide-35
SLIDE 35

Topic 4.3: Message Passing

GOBETWEEN = GO[0], GO[i:0..2] = ( when (i==0) sender[msg:1..2] -> GO[msg] | when (i>0) req

  • > write[i]
  • > GO[0]

). SENDER = ( sender[1] -> SENDER | sender[2] -> SENDER ). RECEIVER = (req -> write[i:1..2] -> RECEIVER). ||SYS = (GOBETWEEN || SENDER || RECEIVER).

slide-36
SLIDE 36

Topic 4.3: Message Passing

And in Java ...

class GoBetween extends Thread { private Channel sender, req, write; private int i=0; public void run () { Select sel = new Select(); sel.add(sender); sel.add(req); while (true) { sender.guard(i==0); req.guard(i>0); switch (sel.choose()) { case 1: i = sender.receive(); break; case 2: req.receive(); write.send(i); i = 0; break; }}}}