erlang各种有用的函数包括一些有用nif封装,还有一些性能测试case。
25'ten fazla konu seçemezsiniz Konular bir harf veya rakamla başlamalı, kısa çizgiler ('-') içerebilir ve en fazla 35 karakter uzunluğunda olabilir.
 
 
 
 
 
 

60 satır
1.5 KiB

-module(utNifArrayDs).
-compile([nowarn_unused_function, nowarn_unused_vars, nowarn_export_all]).
-export([start/2]).
start(Num, Pid) ->
Ds = init(Num),
Time1 = erlang:system_time(nanosecond),
NewDsI = insert(Num - 1, Ds),
Time2 = erlang:system_time(nanosecond),
NewDsR = read(Num - 1, Ds),
Time3 = erlang:system_time(nanosecond),
NewDsU = update(Num - 1, Ds),
Time4 = erlang:system_time(nanosecond),
NewDsF = for(Num - 1, Ds),
Time5 = erlang:system_time(nanosecond),
delete(Num - 1, Ds),
Time6 = erlang:system_time(nanosecond),
erlang:send(Pid, {over, self(), Time2 - Time1, Time3 - Time2, Time4 - Time3, Time5 - Time4, not_support}),
exit(normal).
init(Num) ->
nifArray:new(Num).
insert(0, Ds) ->
% Key = utTestDs:makeK(0),
nifArray:put(Ds, 0, utTestDs:makeV(0));
insert(Num, Ds) ->
% Key = utTestDs:makeK(Num),
nifArray:put(Ds, Num, utTestDs:makeV(Num)),
insert(Num - 1, Ds).
read(0, Ds) ->
% Key = utTestDs:makeK(0),
Value = nifArray:get(Ds, 0),
Ds;
read(Num, Ds) ->
% Key = utTestDs:makeK(Num),
Value = nifArray:get(Ds, Num),
read(Num - 1, Ds).
update(0, Ds) ->
% Key = utTestDs:makeK(0),
nifArray:put(Ds, 0, utTestDs:makeV2(0));
update(Num, Ds) ->
% Key = utTestDs:makeK(Num),
nifArray:put(Ds, Num, utTestDs:makeV2(Num)),
update(Num - 1, Ds).
for(0, Ds) ->
Value = nifArray:get(Ds, 0),
Ds;
for(Num, Ds) ->
Value = nifArray:get(Ds, Num),
for(Num - 1, Ds).
delete(Num, Ds) ->
ok.