Current section
Files
Jump to
Current section
Files
script/sp_queue_bench.exs
count = System.get_env("COUNT", "1000") |> String.to_integer()
IO.puts("Persistent Queue Benchmark\nSending and consuming #{count} messages")
queue_name = :pq
worker_name = :pqw
File.rm_rf!("pq")
parent = self()
{:ok, worker} =
SPQueueWorker.start(
queue_name: queue_name,
name: worker_name,
handler_function: fn msg ->
if msg["index"] == count - 1 do
send(parent, {:done, msg})
end
:ack
end
)
{:ok, queue} =
SPQueue.start(
name: queue_name,
delegate: worker
)
{us, _} =
:timer.tc(fn ->
0..(count - 1)
|> Enum.each(fn i ->
SPQueue.enqueue_wait!(
queue,
%{
"index" => i,
"info" => "this is a benchmark",
"test" => true,
"xy" => [1.5, -2.5],
"q" => :rand.uniform()
},
timeout: 500,
step: 1
)
end)
end)
IO.puts("#{count} messages took #{us / 1_000_000} s")
IO.puts("#{Float.round(us / count, 2)} μs/msg")
IO.puts("#{Float.round(count / us * 1_000_000, 2)} msg/s")
receive do
{:done, last_msg} -> IO.inspect(last_msg, label: "Done, last msg")
end
IO.inspect(SPQueue.empty?(queue), label: "Queue empty ?")
SPQueueWorker.stop(worker)
SPQueue.stop(queue)
File.rm_rf!("pq")