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 line
1.4 KiB

5 年之前
  1. -module(arrayDs).
  2. -compile([nowarn_unused_function, nowarn_unused_vars, nowarn_export_all]).
  3. -export([start/2]).
  4. start(Num, Pid) ->
  5. Ds = init(Num),
  6. erlang:statistics(wall_clock),
  7. NewDsI = insert(Num - 1, Ds),
  8. {_, TimeI} = erlang:statistics(wall_clock),
  9. NewDsR = read(Num - 1, NewDsI),
  10. {_, TimeR} = erlang:statistics(wall_clock),
  11. NewDsU = update(Num - 1, NewDsR),
  12. {_, TimeU} = erlang:statistics(wall_clock),
  13. NewDsF = for(Num - 1, NewDsU),
  14. {_, TimeF} = erlang:statistics(wall_clock),
  15. delete(Num - 1, NewDsF),
  16. {_, TimeD} = erlang:statistics(wall_clock),
  17. erlang:send(Pid, {over, self(), TimeI, TimeR, TimeU, TimeF, not_support}),
  18. exit(normal).
  19. init(Num) ->
  20. array:new(Num, fixed).
  21. insert(0, Ds) ->
  22. Key = utTestDs:makeK(0),
  23. array:set(0, utTestDs:makeV(0), Ds);
  24. insert(Num, Ds) ->
  25. Key = utTestDs:makeK(Num),
  26. NewDs = array:set(Num, utTestDs:makeV(Num), Ds),
  27. insert(Num - 1, NewDs).
  28. read(0, Ds) ->
  29. Key = utTestDs:makeK(0),
  30. Value = array:get(0, Ds),
  31. Ds;
  32. read(Num, Ds) ->
  33. Key = utTestDs:makeK(Num),
  34. Value = array:get(Num, Ds),
  35. read(Num - 1, Ds).
  36. update(0, Ds) ->
  37. Key = utTestDs:makeK(0),
  38. array:set(0, utTestDs:makeV2(0), Ds);
  39. update(Num, Ds) ->
  40. Key = utTestDs:makeK(Num),
  41. NewDs = array:set(Num, utTestDs:makeV2(Num), Ds),
  42. update(Num - 1, NewDs).
  43. for(0, Ds) ->
  44. Value = array:get(0, Ds),
  45. Ds;
  46. for(Num, Ds) ->
  47. Value = array:get(Num, Ds),
  48. for(Num - 1, Ds).
  49. delete(Num, Ds) ->
  50. ok.