CS 476 Programming Language Design William Mansky Concurrency

























- Slides: 25
 
	CS 476 – Programming Language Design William Mansky
	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 3
	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 code 3 5
	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) 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 spawn(body); code 1 code 2 code 3 9
	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 2 code 3 11
	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 • 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 C : = … | send(E, E) | let <ident> = recv() | let <ident> = spawn(C) 14
	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 : = … | send(E, E) | let <ident> = recv() | let <ident> = spawn(C) 16
	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: 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 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 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 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 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 with (id, _) -> send(id, “Hi!”) let p = spawn(proc 1); send(p, (self, “Hello!”)); let answer = recv(); 24