erlang各种有用的函数包括一些有用nif封装,还有一些性能测试case。
Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

60 linhas
1.5 KiB

5 anos atrás
  1. -module(utNifArrayDs).
  2. -compile([nowarn_unused_function, nowarn_unused_vars, nowarn_export_all]).
  3. -export([start/2]).
  4. start(Num, Pid) ->
  5. Ds = init(Num),
  6. Time1 = erlang:system_time(nanosecond),
  7. NewDsI = insert(Num - 1, Ds),
  8. Time2 = erlang:system_time(nanosecond),
  9. NewDsR = read(Num - 1, Ds),
  10. Time3 = erlang:system_time(nanosecond),
  11. NewDsU = update(Num - 1, Ds),
  12. Time4 = erlang:system_time(nanosecond),
  13. NewDsF = for(Num - 1, Ds),
  14. Time5 = erlang:system_time(nanosecond),
  15. delete(Num - 1, Ds),
  16. Time6 = erlang:system_time(nanosecond),
  17. erlang:send(Pid, {over, self(), Time2 - Time1, Time3 - Time2, Time4 - Time3, Time5 - Time4, not_support}),
  18. exit(normal).
  19. init(Num) ->
  20. nifArray:new(Num).
  21. insert(0, Ds) ->
  22. % Key = utTestDs:makeK(0),
  23. nifArray:put(Ds, 0, utTestDs:makeV(0));
  24. insert(Num, Ds) ->
  25. % Key = utTestDs:makeK(Num),
  26. nifArray:put(Ds, Num, utTestDs:makeV(Num)),
  27. insert(Num - 1, Ds).
  28. read(0, Ds) ->
  29. % Key = utTestDs:makeK(0),
  30. Value = nifArray:get(Ds, 0),
  31. Ds;
  32. read(Num, Ds) ->
  33. % Key = utTestDs:makeK(Num),
  34. Value = nifArray:get(Ds, Num),
  35. read(Num - 1, Ds).
  36. update(0, Ds) ->
  37. % Key = utTestDs:makeK(0),
  38. nifArray:put(Ds, 0, utTestDs:makeV2(0));
  39. update(Num, Ds) ->
  40. % Key = utTestDs:makeK(Num),
  41. nifArray:put(Ds, Num, utTestDs:makeV2(Num)),
  42. update(Num - 1, Ds).
  43. for(0, Ds) ->
  44. Value = nifArray:get(Ds, 0),
  45. Ds;
  46. for(Num, Ds) ->
  47. Value = nifArray:get(Ds, Num),
  48. for(Num - 1, Ds).
  49. delete(Num, Ds) ->
  50. ok.