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
48
Aprendizados de um projeto Elixir OTP
amandasposito
4
440
SOLID - Dependency inversion principle
amandasposito
0
60
Programação Funcional & Elixir
amandasposito
3
110
Ecto, você sabe o que é ?
amandasposito
4
220
Novidades no Rails 5
amandasposito
0
87
Rails Engines & RSpec
amandasposito
0
200
Elixir e Phoenix
amandasposito
3
530
Elixir em 5 minutos
amandasposito
1
80
Other Decks in Technology
See All in Technology
サーバレスでモバイルアプリ開発! NTTコム「ビジネスdアプリ」のアーキテクチャ / The architecture of business d app
nttcom
12
240
「認証認可」という体験をデザインする ~Nekko Cloud認証認可基盤計画
logica0419
2
430
どこよりも遅めなWinActor Ver.7.5.0 新機能紹介
tamai_63
0
200
不動産tech Product Night#2_AIことはじめ_GA橋本
takehikohashimoto
0
180
突撃! 隣のAmazon Bedrockユーザー 〜YouはどうしてAWSで?〜
minorun365
PRO
3
380
フロントエンド・オブザーバビリティを支える要素技術を学ぼう
sadnessojisan
2
180
サプライチェーン攻撃に備える
ryunen344
0
270
Mocking in Rust Applications
taiki45
1
410
四国クラウドお遍路 2024 in 高知 オープニング
yukataoka
0
200
Road to Single Activity
yurihondo
1
230
2024年のナビゲーション・フォーカス対応:Composeでキーボード・ナビゲーションをサポートしよう
tahia910
0
110
PdMはどのように全てのスピードを上げられるか ~ 非連続進化のための具体的な取り組み ~
sansantech
PRO
4
1.2k
Featured
See All Featured
What's in a price? How to price your products and services
michaelherold
242
11k
Design by the Numbers
sachag
277
19k
Infographics Made Easy
chrislema
239
18k
The Cult of Friendly URLs
andyhume
76
6k
Building a Modern Day E-commerce SEO Strategy
aleyda
36
6.8k
Clear Off the Table
cherdarchuk
91
320k
Making the Leap to Tech Lead
cromwellryan
128
8.8k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
123
18k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
225
22k
Building Your Own Lightsaber
phodgson
101
6k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
166
48k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
24
610
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!