Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Como concorrência funciona em Elixir?
Search
Amanda
February 03, 2018
Technology
1
210
Como concorrência funciona em Elixir?
Amanda
February 03, 2018
Tweet
Share
More Decks by Amanda
See All by Amanda
Lessons Learned From an Elixir OTP Project
amandasposito
2
55
Aprendizados de um projeto Elixir OTP
amandasposito
4
490
SOLID - Dependency inversion principle
amandasposito
0
66
Programação Funcional & Elixir
amandasposito
3
110
Ecto, você sabe o que é ?
amandasposito
4
230
Novidades no Rails 5
amandasposito
0
91
Rails Engines & RSpec
amandasposito
0
200
Elixir e Phoenix
amandasposito
3
540
Elixir em 5 minutos
amandasposito
1
83
Other Decks in Technology
See All in Technology
生成AI × 旅行 LLMを活用した旅行プラン生成・チャットボット
kominet_ava
0
170
FinJAWS_reinvent2024_recap_database
asahihidehiko
2
130
My small contributions - Fujiwara Tech Conference 2025
ijin
0
1.5k
データ基盤におけるIaCの重要性とその運用
mtpooh
4
690
コロプラのオンボーディングを採用から語りたい
colopl
5
1.4k
完全自律型AIエージェントとAgentic Workflow〜ワークフロー構築という現実解
pharma_x_tech
0
380
iPadOS18でフローティングタブバーを解除してみた
sansantech
PRO
1
150
JuliaTokaiとJuliaLangJaの紹介 for NGK2025S
antimon2
1
140
自社 200 記事を元に整理した読みやすいテックブログを書くための Tips 集
masakihirose
2
360
.NET AspireでAzure Functionsやクラウドリソースを統合する
tsubakimoto_s
0
190
なぜfreeeはハブ・アンド・スポーク型の データメッシュアーキテクチャにチャレンジするのか?
shinichiro_joya
2
740
Amazon Route 53, 待ちに待った TLSAレコードのサポート開始
kenichinakamura
0
190
Featured
See All Featured
Gamification - CAS2011
davidbonilla
80
5.1k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
280
13k
The Straight Up "How To Draw Better" Workshop
denniskardys
232
140k
Why You Should Never Use an ORM
jnunemaker
PRO
54
9.2k
Why Our Code Smells
bkeepers
PRO
335
57k
Keith and Marios Guide to Fast Websites
keithpitt
410
22k
Become a Pro
speakerdeck
PRO
26
5.1k
Build The Right Thing And Hit Your Dates
maggiecrowley
33
2.5k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
3
360
Faster Mobile Websites
deanohume
305
30k
RailsConf 2023
tenderlove
29
980
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
160
15k
Transcript
Como concorrência funciona em Elixir?
amandasposito.com.br @amsposito linkedin.com/in/amandasposito
None
https://plataformatec.recruitee.com/
Por que falar sobre concorrência?
None
O que é concorrência?
Paralelismo?
Concorrência vs Paralelismo
Por que isso é importante?
http://www.gotw.ca/publications/concurrency-ddj.htm
Como isso interfere no nosso software?
Mas e como isso funciona em Elixir?
Estado explicito
Processos
Troca de mensagens
Processos são a base do modelo de concorrência em Elixir
São totalmente isolados
Processos rodam concorrentemente e podem rodar em paralelo
Troca de mensagens
None
Processos podem ser supervisionados
Como isso funciona exatamente?
Scheduler
CPU Scheduler Scheduler CPU Scheduler CPU Scheduler CPU BEAM
CPU Scheduler Scheduler CPU Scheduler CPU Scheduler CPU BEAM
CPU Scheduler Scheduler CPU Scheduler CPU Scheduler CPU BEAM
CPU Scheduler Scheduler CPU Scheduler CPU Scheduler CPU BEAM
CPU Scheduler Scheduler CPU Scheduler CPU Scheduler CPU BEAM
CPU Scheduler Scheduler CPU Scheduler CPU Scheduler CPU BEAM
CPU Scheduler Scheduler CPU Scheduler CPU Scheduler CPU BEAM
O que acontece quando um processo falha?
Let it crash
None
Mas como?
Processos não são isolados?
Sim
Arvore de Supervisão
SUP Process Process Process
Estrategias de restart
One for one
SUP Process Process Process
SUP Process Process Process
SUP Process Process Process
One for all
SUP Process Process Process
SUP Process Process Process
SUP Process Process Process
Rest for one
SUP Process Process Process
SUP Process Process Process
SUP Process Process Process
Tolerância a falhas
Como que nós usamos processos em Elixir então?
Task
{:ok, task1} = Task.async(fn -> do_some_work() end) {:ok, task2} =
Task.async(fn -> do_more_work() end) Task.await(task1) Task.await(task2)
Agent
{: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)
GenServer
E esse tal de OTP?
None
Task, Agent e Genserver são OTP complient
Preciso implementar isso tudo na mão?
Sim e não
Recapitulando
Concorrência é conseguir realizar várias tarefas no mesmo intervalo de
tempo
Processos são muito importantes para concorrência
Processos podem ser Supervisionados
Arvore de supervisão acontece quando temos vários supervisores
Task é uma abstração para controlar processos simples
Agent é uma abstração para lidarmos com Estado
GenServer é uma abstração que pode controlar processos e estados.
Obrigada!