erlang各种有用的函数包括一些有用nif封装,还有一些性能测试case。
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

60 lines
1.4 KiB

-module(arrayDs).
-compile([nowarn_unused_function, nowarn_unused_vars, nowarn_export_all]).
-export([start/2]).
start(Num, Pid) ->
Ds = init(Num),
erlang:statistics(wall_clock),
NewDsI = insert(Num - 1, Ds),
{_, TimeI} = erlang:statistics(wall_clock),
NewDsR = read(Num - 1, NewDsI),
{_, TimeR} = erlang:statistics(wall_clock),
NewDsU = update(Num - 1, NewDsR),
{_, TimeU} = erlang:statistics(wall_clock),
NewDsF = for(Num - 1, NewDsU),
{_, TimeF} = erlang:statistics(wall_clock),
delete(Num - 1, NewDsF),
{_, TimeD} = erlang:statistics(wall_clock),
erlang:send(Pid, {over, self(), TimeI, TimeR, TimeU, TimeF, not_support}),
exit(normal).
init(Num) ->
array:new(Num, fixed).
insert(0, Ds) ->
Key = utTestDs:makeK(0),
array:set(0, utTestDs:makeV(0), Ds);
insert(Num, Ds) ->
Key = utTestDs:makeK(Num),
NewDs = array:set(Num, utTestDs:makeV(Num), Ds),
insert(Num - 1, NewDs).
read(0, Ds) ->
Key = utTestDs:makeK(0),
Value = array:get(0, Ds),
Ds;
read(Num, Ds) ->
Key = utTestDs:makeK(Num),
Value = array:get(Num, Ds),
read(Num - 1, Ds).
update(0, Ds) ->
Key = utTestDs:makeK(0),
array:set(0, utTestDs:makeV2(0), Ds);
update(Num, Ds) ->
Key = utTestDs:makeK(Num),
NewDs = array:set(Num, utTestDs:makeV2(Num), Ds),
update(Num - 1, NewDs).
for(0, Ds) ->
Value = array:get(0, Ds),
Ds;
for(Num, Ds) ->
Value = array:get(Num, Ds),
for(Num - 1, Ds).
delete(Num, Ds) ->
ok.