使用单个进程很容易实现算法,但是,如何使用多个进程来完成工作?
这是我到目前为止所做的.
find_largest([H], _) -> H;
find_largest([H, Q | T], R) ->
if H > Q -> find_largest([H | T], [Q | R]);
true -> find_largest([Q | T], [H | R])
end.
Run Code Online (Sandbox Code Playgroud)
谢谢
鉴于Erlang如何表示列表,尝试并行执行并不是一个好主意.对列表进行分区意味着需要进行大量复制(因为它们是链接列表),并且将这些分区发送到其他进程也是如此.我希望比较比将所有内容复制两次然后合并结果要便宜得多.
实现也不正确,你可以在lists.erl中找到一个好的,作为max/1
%% max(L) -> returns the maximum element of the list L
-spec max([T,...]) -> T.
max([H|T]) -> max(T, H).
max([H|T], Max) when H > Max -> max(T, H);
max([_|T], Max) -> max(T, Max);
max([], Max) -> Max.
Run Code Online (Sandbox Code Playgroud)
如果您的数据有可能已经在单独的进程中,只需获取列表:max/1或每个列表并将它们发送到一个地方,然后获取列表:结果列表的max/1.您也可以在收到结果时进行比较,以避免构建此中间列表.
| 归档时间: |
|
| 查看次数: |
449 次 |
| 最近记录: |