scheduler scheduler scheduler scheduler
BEAM instanca
CPU CPU CPU CPU
Slide 11
Slide 11 text
pid = spawn(fn -> ... end)
Slide 12
Slide 12 text
pid = spawn(fn -> ... end)
send(pid, :ping)
Slide 13
Slide 13 text
spawn(fn ->
receive do
:ping ->
# ...
end
end)
Slide 14
Slide 14 text
send(pid, {:ping, self()})
Slide 15
Slide 15 text
spawn(fn ->
receive do
{:ping, caller_pid} ->
send(caller_pid, :pong)
end
end)
Slide 16
Slide 16 text
send(pid, {:ping, self()})
receive do
:pong ->
# ...
after :timer.seconds(5) ->
# ...
end
Slide 17
Slide 17 text
pid = spawn(fn ->
server_loop(state)
end)
Slide 18
Slide 18 text
defp server_loop(state) do
receive do
message ->
new_state = handle(state, message)
server_loop(new_state)
end
end
Slide 19
Slide 19 text
bank account
balance
Slide 20
Slide 20 text
send(pid, {:deposit, 100})
send(pid, {:withdraw, 100})
send(pid, {:balance, self()})
receive do
balance ->
# ...
end
Slide 21
Slide 21 text
spawn(fn ->
bank_account_loop(0)
end)
Slide 22
Slide 22 text
def bank_account_loop(balance) do
receive do
{:deposit, amount} ->
bank_account_loop(balance + amount)
{:withdraw, amount} ->
bank_account_loop(balance - amount)
{:balance, caller_pid} ->
send(caller_pid, balance)
bank_account_loop(balance)
end
end
Slide 23
Slide 23 text
bank account
{:deposit, amount}
{:withdraw, amount}
:balance
Slide 24
Slide 24 text
No content
Slide 25
Slide 25 text
db connection
background job
request handler
state
request handler
request handler
request handler
request handler
request handler state
state
state
background job
background job
background job
db connection db connection
db connection
Slide 26
Slide 26 text
A
B
C
D
E
F
Slide 27
Slide 27 text
A
exit notifikacija
B
C
D
E
F
Slide 28
Slide 28 text
S
S S
W
W
S
W
W
W S
W
W
Slide 29
Slide 29 text
VM
VM
VM
VM
VM
Slide 30
Slide 30 text
VM
send(pid, message)
VM 1
send(pid, message)
VM 2