Slide 1

Slide 1 text

Solid ground @sasajuric aircloak.com

Slide 2

Slide 2 text

No content

Slide 3

Slide 3 text

long-running system many tasks soft real-time finite time program all-or-nothing hard real-time

Slide 4

Slide 4 text

NIFs

Slide 5

Slide 5 text

scheduler scheduler scheduler scheduler BEAM CPU CPU CPU CPU

Slide 6

Slide 6 text

frequent context switches

Slide 7

Slide 7 text

t1 t2 t3 t4 t5 10 s 1 ms 1 ms 1 ms 1 ms

Slide 8

Slide 8 text

t1 t2 t3 t4 t5 t1 BEAM scheduler

Slide 9

Slide 9 text

t2 t3 t4 t5 t1 cooperative scheduler

Slide 10

Slide 10 text

thread 1 thread n … long running task long running task blocked cooperative scheduler

Slide 11

Slide 11 text

thread 1 thread n … long running task long running task not blocked :-) BEAM scheduler

Slide 12

Slide 12 text

activities as runtime citizens

Slide 13

Slide 13 text

send(pid, :please_stop)

Slide 14

Slide 14 text

mref = Process.monitor(pid) send(pid, :please_stop) receive do {:DOWN, ^mref, :process, ^pid, _reason} -> :ok end

Slide 15

Slide 15 text

mref = Process.monitor(pid) send(pid, :please_stop) receive do {:DOWN, ^mref, :process, ^pid, _reason} -> :ok after :timer.seconds(5) -> Process.exit(pid, :kill) receive do {:DOWN, ^mref, :process, ^pid, _reason} -> :ok end end

Slide 16

Slide 16 text

task = Task.async(fn -> ... end) case Task.yield(task, :timer.seconds(5)) do {:ok, result} -> do_something(result) nil -> Task.shutdown(task, :brutal_kill) end

Slide 17

Slide 17 text

shared-nothing concurrency

Slide 18

Slide 18 text

Process heap resources

Slide 19

Slide 19 text

process-owned “stuff” is released

Slide 20

Slide 20 text

supervision tree

Slide 21

Slide 21 text

system backend frontend chat history repo cache endpoint

Slide 22

Slide 22 text

system backend chat history repo

Slide 23

Slide 23 text

supervisor foundations frequent context switching activities as runtime citizens observable process termination stoppable processes shared-nothing concurrency

Slide 24

Slide 24 text

runtime 
 guarantees syntax developer friendliness ecosystem

Slide 25

Slide 25 text

Image credit Scales of Justice