erlang各种有用的函数包括一些有用nif封装,还有一些性能测试case。
Du kannst nicht mehr als 25 Themen auswählen Themen müssen entweder mit einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.
 
 
 
 
 
 

57 Zeilen
1.2 KiB

-module(utSEtsSetDs).
-compile([nowarn_unused_function, nowarn_unused_vars, nowarn_export_all]).
-export([start/2]).
start(Num, Pid) ->
Ds = init(Num),
Time1 = erlang:monotonic_time(),
NewDsI = insert(Num, Ds),
Time2 = erlang:monotonic_time(),
NewDsR = read(Num, NewDsI),
Time3 = erlang:monotonic_time(),
NewDsU = update(Num, NewDsR),
Time4 = erlang:monotonic_time(),
NewDsF = for(Num, NewDsU),
Time5 = erlang:monotonic_time(),
delete(Num, NewDsF),
Time6 = erlang:monotonic_time(),
erlang:send(Pid, {over, self(), Time2 - Time1, Time3 - Time2, Time4 - Time3, Time5 - Time4, Time6 - Time5, ets:info(Ds, memory)}),
exit(normal).
init(_Num) ->
ets:new(test, [set]).
insert(0, Ds) ->
Ds;
insert(Num, Ds) ->
ets:insert(Ds, {Num, Num}),
insert(Num - 1, Ds).
read(0, Ds) ->
Ds;
read(Num, Ds) ->
Value = ets:lookup(Ds, Num),
read(Num - 1, Ds).
update(0, Ds) ->
Ds;
update(Num, Ds) ->
ets:update_element(Ds, Num, {2, Num + 1}),
update(Num - 1, Ds).
for(Num, Ds) ->
Fun =
fun({Key, Value}, Acc) ->
Value
end,
List = ets:foldl(Fun, [], Ds),
Ds.
delete(0, Ds) ->
ok;
delete(Num, Ds) ->
ets:delete(Ds, Num),
delete(Num - 1, Ds).