繁体   English   中英

Elixir的并行映射算法

[英]Elixir's parallel map algorithm

我目前正在研究“ Programming Elixir”这本书,并且发现了以并行方式实现的“ map”示例:

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

该代码的注释说:“请注意,它如何在接收块中使用^pid依次获取每个PID的结果。如果不这样做,我们将以随机顺序获取结果。” 有人可以澄清吗?

^称为引脚运算符。 它与变量的先前值匹配,而不是将其重新绑定到新值。 所以:

receive do
  {pid, result} -> result
end

接收格式为{whatever, whatever}任何消息,并从该元组返回第二个元素。

receive do
  {^pid, result} -> result
end

接收任何消息,它们是元组,并且第一个元素是存储在pid中的某个确切值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM