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
- William mansky
- William mansky
- William mansky
- 500 - 476
- Cs 476
- What are compatible numbers
- 476 a 1453
- 476 a 1453
- Symmetrical components in power system pdf
- Paminklas
- 476 a 1453
- That "rome fell in a.d. 476" means
- Concilium plebis adalah
- 476 fighter group
- Bistogram cikajang
- 476 bus times
- Ece 476
- Ece 476
- Dhol exemple
- Ie 753
- Ntp 854
- I.sz. 476
- Resolve
- Ece 476
- Rome 509
- Ece 476