- 介绍
- 跑在erlang虚拟机上
- 与erlang相同,actor称作进程, 是比线程更轻量的概念
- 使用
- o→ 元组
- {:foo, “this”, 42}
- o→ actor
- defmodule Talker do
- def loop do
- receive do
- {:greet, name, age} → IO.puts(“Hello #{name}”)
- {:shutdown} → exit(:normal)
- end
- loop
- end
- end
- pid = spawn(&Talker.loop/0)
- send(pid, {:greet, “Huey”, 16})
- sleep(1000)
- Process.flag(:trap_exit, true)
- pid = spawn_link(&Takler.loop/0)
- send(pid, {:shutdown})
- receive do
- {:EXIT, ^pid, reason} → IO.puts(“Talker has exited (#{reason})”)
- end
- o→ 有状态的actor
- defmodule Counter do
- def start(count) do
- spawn(MODULE, :loop, [count])
- end
- def next(counter) do
- end
- def loop(count) do
- receive do
- {:next} →
- IO.puts(“Current count: #{count}”)
- loop(count + 1)
- end
- end
- end
- counter = spawn(Counter, :loop, [1])
- send(counter, {:next})
- counter = Countre.start(42)
- Counter.next(counter)