我创建了一个简单的函数,可以将随机消息广播到频道。我试图产生4-16个进程,但CPU使用率不会超过200%。我有8个核心。
defmodule Example do
def listen do
receive do
{:ok, "rush"} ->
sample_text = ["foo", "bar", "baz", "qux", "quux", "quuz"]
h = Enum.take_random(sample_text, 1)
MyApp.Endpoint.broadcast("topic", "message:new", %{body: Enum.at(h, 0, :default)})
end
listen()
end
end
max = 16
list = Enum.flat_map (1..max), fn _ ->
[spawn(Example, :listen, [])]
end
elem(:timer.tc(fn -> (1..1000000)|> Enum.each(fn x ->
send Enum.at(list, rem(x, (max-1)), :default), {:ok, "rush"}
end)end, []),0) / 1000000
这是否连接到我的SSD,这是瓶颈还是为什么我无法最大限度地利用CPU?
这是我在启动凤凰时所得到的。
Erlang/OTP 19 [erts-8.3] [source] [64-bit] [smp:8:8] [async-threads:10] [hipe] [kernel-poll:false] [dtrace]
答案 0 :(得分:0)
它没有使用所有cpus的原因是因为我直接在控制台中定义了模块而不是编译它们。一旦我做到了,它确实按预期工作:)