erlang的list函数优化

1、把lists:foreach(Fun, List)分割成若干个进程均分处理,默认分成10个进程
%% @doc 把lists:foreach(Fun, List) 函数分割成若干个进程平均处理,默认分割成10个进程
-spec foreach_split(Fun, ObjList) -> ok when
Fun :: function(),
ObjList :: [term()].
foreach_split(Fun, ObjList) ->
foreach_split(Fun, ObjList, 10).
foreach_split(Fun, ObjList, SplitNum) ->
Len = length(ObjList),
SplitObjList =
case Len =< SplitNum of
true ->
list_util:unappend(ObjList);
false ->
AveNum = Len div SplitNum,
lists:foldl(
fun(N, {Acc, Tail}) when N == SplitNum ->
[Tail|Acc];
(_N, {Acc, Tail}) ->
{Head, NewTail} = lists:split(AveNum, Tail),
{[Head|Acc], NewTail}
end, {[], ObjList}, lists:seq(1, SplitNum))
end,
spawn(fun() ->
Self = self(),
%% Before = os:timestamp(),
lists:foreach(fun(SplitObjList1) ->
Ref = erlang:make_ref(),
spawn(fun() ->
[Fun(Obj) || Obj <- SplitObjList1],
Self ! {ok,Ref}
end),
Refs = case get(refs) /= undefined of true -> get(refs); false -> [] end,
put(refs, [Ref|Refs])
end, SplitObjList),
ok = loop(get(refs)),
%% After = os:timestamp(),
%% T = timer:now_diff(After, Before),
%% ?WARNING_MSG(“并发测试 microsecs =pn”,[T]),
ok
end),
ok.
目的:提高foreach处理效率

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值