gpt4 book ai didi

Elixir的并行映射算法

转载 作者:行者123 更新时间:2023-12-02 06:34:49 25 4
gpt4 key购买 nike

我目前正在阅读《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

代码的注释说:“注意它如何在接收 block 中使用 ^pid 来依次获取每个 PID 的结果。如果没有这个,我们将以随机顺序返回结果.”。有人可以澄清一下吗?

最佳答案

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

receive do
{pid, result} -> result
end

接收{whatever,whatever}形式的任何消息并返回该元组中的第二个元素。但是

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

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

关于Elixir的并行映射算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38051919/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com