CS 476 Programming Language Design William Mansky Concurrency

  • Slides: 25
Download presentation
CS 476 – Programming Language Design William Mansky

CS 476 – Programming Language Design William Mansky

Concurrency from Scratch • We’ve seen two ways of adding concurrency to a simple

Concurrency from Scratch • We’ve seen two ways of adding concurrency to a simple imperative language. • What would it look like to design a language with concurrency in mind? • Main questions: ― What is the state of a concurrent program? ― What actions can a process perform? ― How do processes communicate? 1

Concurrency from Scratch: Actor Model code 1 code 2 code 3 2

Concurrency from Scratch: Actor Model code 1 code 2 code 3 2

Concurrency from Scratch: Actor Model code 1' code 2 code 3 3

Concurrency from Scratch: Actor Model code 1' code 2 code 3 3

Concurrency from Scratch: Actor Model send(msg); code 1 code 2 code 3 4

Concurrency from Scratch: Actor Model send(msg); code 1 code 2 code 3 4

Concurrency from Scratch: Actor Model A C B send(B, msg); code 1 code 2

Concurrency from Scratch: Actor Model A C B send(B, msg); code 1 code 2 code 3 5

Concurrency from Scratch: Actor Model A C B code 1 code 2 code 3

Concurrency from Scratch: Actor Model A C B code 1 code 2 code 3 B: msg 6

Concurrency from Scratch: Actor Model A C B code 1 x = recv(); f(x)

Concurrency from Scratch: Actor Model A C B code 1 x = recv(); f(x) code 3 B: msg 7

Concurrency from Scratch: Actor Model A C B code 1 f(msg) code 3 8

Concurrency from Scratch: Actor Model A C B code 1 f(msg) code 3 8

Concurrency from Scratch: Actor Model A C B spawn(body); code 1 code 2 code

Concurrency from Scratch: Actor Model A C B spawn(body); code 1 code 2 code 3 9

Concurrency from Scratch: Actor Model A C B code 1 code 2 code 3

Concurrency from Scratch: Actor Model A C B code 1 code 2 code 3 D body 10

Concurrency from Scratch: Actor Model A C B x = spawn(body); code 1(x) code

Concurrency from Scratch: Actor Model A C B x = spawn(body); code 1(x) code 2 code 3 11

Concurrency from Scratch: Actor Model A C B code 1(D) code 2 code 3

Concurrency from Scratch: Actor Model A C B code 1(D) code 2 code 3 D body 12

Actor Model • The state of a program is a collection of actors •

Actor Model • The state of a program is a collection of actors • Each actor can: ― do sequential computation ― send messages to other actors, if it knows their names ― create new actors • No shared variables or memory, just messages • Communication is asynchronous • Messages can contain actor names • Used in Erlang, Pony, and various message-passing libraries 13

Simple Actor Language: Syntax E : = (as in a functional language) | self

Simple Actor Language: Syntax E : = (as in a functional language) | self C : = … | send(E, E) | let <ident> = recv() | let <ident> = spawn(C) 14

Simple Actor Language: Example Hello! Hi! let proc 1 = let x = recv();

Simple Actor Language: Example Hello! Hi! let proc 1 = let x = recv(); match x with (id, _) -> send(id, “Hi!”) let p = spawn(proc 1); send(p, (self, “Hello!”)); let answer = recv(); 15

Simple Actor Language: Types? E : = (as in a functional language) C :

Simple Actor Language: Types? E : = (as in a functional language) C : = … | send(E, E) | let <ident> = recv() | let <ident> = spawn(C) 16

Simple Actor Language: Semantics • An execution state has a set of actors and

Simple Actor Language: Semantics • An execution state has a set of actors and a pool of in-flight messages • An actor has an id, code, and local state • Every step involves only one actor 17

Simple Actor Language: Semantics 18

Simple Actor Language: Semantics 18

Simple Actor Language: Example let proc 1 = let x = recv(); match x

Simple Actor Language: Example let proc 1 = let x = recv(); match x with (id, _) -> send(id, “Hi!”) let p = spawn(proc 1); send(p, (self, “Hello!”)); let answer = recv(); 19

Simple Actor Language: Example let proc 1 = let x = recv(); match x

Simple Actor Language: Example let proc 1 = let x = recv(); match x with (id, _) -> send(id, “Hi!”) let p = spawn(proc 1); send(p, (self, “Hello!”)); let answer = recv(); 20

Simple Actor Language: Example let proc 1 = let x = recv(); match x

Simple Actor Language: Example let proc 1 = let x = recv(); match x with (id, _) -> send(id, “Hi!”) let p = spawn(proc 1); send(p, (self, “Hello!”)); let answer = recv(); 21

Simple Actor Language: Example let proc 1 = let x = recv(); match x

Simple Actor Language: Example let proc 1 = let x = recv(); match x with (id, _) -> send(id, “Hi!”) let p = spawn(proc 1); send(p, (self, “Hello!”)); let answer = recv(); 22

Simple Actor Language: Example let proc 1 = let x = recv(); match x

Simple Actor Language: Example let proc 1 = let x = recv(); match x with (id, _) -> send(id, “Hi!”) let p = spawn(proc 1); send(p, (self, “Hello!”)); let answer = recv(); 23

Simple Actor Language: Example let proc 1 = let x = recv(); match x

Simple Actor Language: Example let proc 1 = let x = recv(); match x with (id, _) -> send(id, “Hi!”) let p = spawn(proc 1); send(p, (self, “Hello!”)); let answer = recv(); 24