Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Solid Ground

Solid Ground

ElixirDaze 2017

Video available at https://www.youtube.com/watch?v=5SbWapbXhKo

Saša Jurić

March 06, 2017
Tweet

More Decks by Saša Jurić

Other Decks in Programming

Transcript

  1. Solid ground
    @sasajuric
    aircloak.com

    View Slide

  2. View Slide

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

    View Slide

  4. NIFs

    View Slide

  5. scheduler scheduler scheduler scheduler
    BEAM
    CPU CPU CPU CPU

    View Slide

  6. frequent context switches

    View Slide

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

    View Slide

  8. t1 t2 t3 t4 t5 t1
    BEAM scheduler

    View Slide

  9. t2 t3 t4 t5
    t1
    cooperative scheduler

    View Slide

  10. thread 1 thread n

    long running task long running task
    blocked
    cooperative scheduler

    View Slide

  11. thread 1 thread n

    long running task long running task
    not blocked :-)
    BEAM scheduler

    View Slide

  12. activities as runtime citizens

    View Slide

  13. send(pid, :please_stop)

    View Slide

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

    View Slide

  15. 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

    View Slide

  16. 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

    View Slide

  17. shared-nothing concurrency

    View Slide

  18. Process
    heap
    resources

    View Slide

  19. process-owned “stuff” is released

    View Slide

  20. supervision tree

    View Slide

  21. system
    backend frontend
    chat history
    repo cache endpoint

    View Slide

  22. system
    backend
    chat history
    repo

    View Slide

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

    View Slide

  24. runtime 

    guarantees
    syntax
    developer friendliness
    ecosystem

    View Slide

  25. Image credit
    Scales of Justice

    View Slide