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

Como concorrência funciona em Elixir?

7c1e5b1b100ab8cfacbe14173437c998?s=47 Amanda
February 03, 2018

Como concorrência funciona em Elixir?

7c1e5b1b100ab8cfacbe14173437c998?s=128

Amanda

February 03, 2018
Tweet

Transcript

  1. Como concorrência funciona em Elixir?

  2. amandasposito.com.br @amsposito linkedin.com/in/amandasposito

  3. None
  4. https://plataformatec.recruitee.com/

  5. Por que falar sobre concorrência?

  6. None
  7. O que é concorrência?

  8. Paralelismo?

  9. Concorrência vs Paralelismo

  10. Por que isso é importante?

  11. http://www.gotw.ca/publications/concurrency-ddj.htm

  12. Como isso interfere no nosso software?

  13. Mas e como isso funciona em Elixir?

  14. Estado explicito

  15. Processos

  16. Troca de mensagens

  17. Processos são a base do modelo de concorrência em Elixir

  18. São totalmente isolados

  19. Processos rodam concorrentemente e podem rodar em paralelo

  20. Troca de mensagens

  21. None
  22. Processos podem ser supervisionados

  23. Como isso funciona exatamente?

  24. Scheduler

  25. CPU Scheduler Scheduler CPU Scheduler CPU Scheduler CPU BEAM

  26. CPU Scheduler Scheduler CPU Scheduler CPU Scheduler CPU BEAM

  27. CPU Scheduler Scheduler CPU Scheduler CPU Scheduler CPU BEAM

  28. CPU Scheduler Scheduler CPU Scheduler CPU Scheduler CPU BEAM

  29. CPU Scheduler Scheduler CPU Scheduler CPU Scheduler CPU BEAM

  30. CPU Scheduler Scheduler CPU Scheduler CPU Scheduler CPU BEAM

  31. CPU Scheduler Scheduler CPU Scheduler CPU Scheduler CPU BEAM

  32. O que acontece quando um processo falha?

  33. Let it crash

  34. None
  35. Mas como?

  36. Processos não são isolados?

  37. Sim

  38. Arvore de Supervisão

  39. SUP Process Process Process

  40. Estrategias de restart

  41. One for one

  42. SUP Process Process Process

  43. SUP Process Process Process

  44. SUP Process Process Process

  45. One for all

  46. SUP Process Process Process

  47. SUP Process Process Process

  48. SUP Process Process Process

  49. Rest for one

  50. SUP Process Process Process

  51. SUP Process Process Process

  52. SUP Process Process Process

  53. Tolerância a falhas

  54. Como que nós usamos processos em Elixir então?

  55. Task

  56. {:ok, task1} = Task.async(fn -> do_some_work() end) {:ok, task2} =

    Task.async(fn -> do_more_work() end) Task.await(task1) Task.await(task2)
  57. Agent

  58. {:ok, pid} = Agent.start_link(fn -> 0 end) value1 = Agent.get(pid,

    fn x -> x end) Agent.update(pid, fn x -> x + 1 end) value2 = Agent.get(pid, fn x -> x end)
  59. GenServer

  60. E esse tal de OTP?

  61. None
  62. Task, Agent e Genserver são OTP complient

  63. Preciso implementar isso tudo na mão?

  64. Sim e não

  65. Recapitulando

  66. Concorrência é conseguir realizar várias tarefas no mesmo intervalo de

    tempo
  67. Processos são muito importantes para concorrência

  68. Processos podem ser Supervisionados

  69. Arvore de supervisão acontece quando temos vários supervisores

  70. Task é uma abstração para controlar processos simples

  71. Agent é uma abstração para lidarmos com Estado

  72. GenServer é uma abstração que pode controlar processos e estados.

  73. Obrigada!