私はモジュールに従っています、それは平行地図をシミュレートします。なぜランダムな順序
defmodule Parallel do
def pmap(collection, fun) do
me = self
collection
|> Enum.map(fn (elem) ->
spawn_link fn -> send(me, { self, fun.(elem) }) end
end)
|> Enum.map(fn (pid) ->
receive do { ^pid, result } ->
result
end
end)
end
end
私が実行して、コンパイルして期待通りになりました:
:私はreceive do { pid, result } ->
からピン印刷オペレータを削除すると
iex(5)> Parallel.pmap 1..1000, &(&1 * &1)
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144, 169, 196, 225, 256 ...]
、その後、私は正しい順序でリストこれ以上を得なかっました
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144, 169, 196, 256, 225, 289, 361...]
なぜピンオペレータが注文に影響しますか?