【发布时间】:2016-07-13 01:22:09
【问题描述】:
我正在关注模拟并行地图的模块。
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
我按预期编译、运行并得到结果:
iex(5)> Parallel.pmap 1..1000, &(&1 * &1)
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144, 169, 196, 225, 256 ...]
当我从 receive do { pid, result } -> 中删除 pin 打印操作符时,我就没有正确顺序的列表了:
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144, 169, 196, 256, 225, 289, 361...]
为什么 pin 操作员会影响订单?
【问题讨论】:
标签: elixir