Parallel processing 菲尼克斯/长生不老药核心的使用,不能最大化
我创建了一个简单的函数,可以将随机消息广播到一个频道。我曾尝试生成4-16个进程,但CPU使用率不会超过200%。我有8个核Parallel processing 菲尼克斯/长生不老药核心的使用,不能最大化,parallel-processing,erlang,elixir,phoenix-framework,Parallel Processing,Erlang,Elixir,Phoenix Framework,我创建了一个简单的函数,可以将随机消息广播到一个频道。我曾尝试生成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,
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
这就是我在启动phoenix时得到的
Erlang/OTP 19 [erts-8.3] [source] [64-bit] [smp:8:8] [async-threads:10] [hipe] [kernel-poll:false] [dtrace]
它没有使用所有CPU的原因是我直接在控制台中定义了模块,而不是编译它们。一旦我这样做了,它就如预期的那样工作了:)它没有使用所有CPU的原因是因为我直接在控制台中定义了模块,而不是编译它们。一旦我这么做了,它就如预期的那样成功了:)你也尝试过生成多个发送者进程吗?@Dogbert我没有。“也许这样就行了?”多伯特:看看我的答案你也尝试过生成多个发送者进程吗?@Dogbert我没有。“也许这样就行了?”多伯特:看看我的答案