diff options
author | kballou <kballou@devnulllabs.io> | 2014-10-16 19:22:50 -0600 |
---|---|---|
committer | kballou <kballou@devnulllabs.io> | 2014-10-20 16:28:38 -0600 |
commit | ccc7ba834e11b0da450800a8695954baee9c06b7 (patch) | |
tree | ce9f64744ca8fdeaa184b139eb70364e9c331946 /lib/poolparty/pool | |
parent | 226970e89bb4b8b32c2c08c2ef2999a3e8e4abbd (diff) | |
download | poolparty-ccc7ba834e11b0da450800a8695954baee9c06b7.tar.gz poolparty-ccc7ba834e11b0da450800a8695954baee9c06b7.tar.xz |
PoolParty Scheduler, supervisor, and workers
Add PoolParty supervisor, scheduler, pool supervisor, and pool
workers
Diffstat (limited to 'lib/poolparty/pool')
-rw-r--r-- | lib/poolparty/pool/supervisor.ex | 16 | ||||
-rw-r--r-- | lib/poolparty/pool/worker.ex | 22 |
2 files changed, 38 insertions, 0 deletions
diff --git a/lib/poolparty/pool/supervisor.ex b/lib/poolparty/pool/supervisor.ex new file mode 100644 index 0000000..e95ceac --- /dev/null +++ b/lib/poolparty/pool/supervisor.ex @@ -0,0 +1,16 @@ +defmodule PoolParty.Pool.Supervisor do + use Supervisor + + def start_link(pool_size, opts \\ []) do + Supervisor.start_link(__MODULE__, {pool_size}, opts) + end + + def init({pool_size}) do + children = (1..pool_size) |> + Enum.map(fn (id) -> + worker(PoolParty.Pool.Worker, [], id: id) + end) + supervise(children, strategy: :one_for_one) + end + +end diff --git a/lib/poolparty/pool/worker.ex b/lib/poolparty/pool/worker.ex new file mode 100644 index 0000000..c4685f5 --- /dev/null +++ b/lib/poolparty/pool/worker.ex @@ -0,0 +1,22 @@ +defmodule PoolParty.Pool.Worker do + use GenServer + + def start_link(opts \\ []) do + GenServer.start_link(__MODULE__, {}, opts) + end + + def init(_) do + PoolParty.Scheduler.join(self) + {:ok, nil} + end + + def process(pid, function, args) do + GenServer.cast(pid, {:compute, function, args}) + end + + def handle_cast({:compute, function, args}, _) do + PoolParty.Scheduler.ready({:result, function.(args), self}) + {:noreply, nil} + end + +end |