Erlang에서 함수 실행 시간 측정하기
전형적으로 함수 실행 전후에 시간을 측정한 다음 그 시간차를 계산해서 실행 시간을 측정한다. erlang에서는 다음과 같이 구현할 수 있다.
T1 = erlang:timestamp(),
% (add your function(s) here)
T2 = erlang:timestamp(),
timer:now_diff(T2, T1).
전에는 now()
를 썼었는데 deprecated 되었고 요즘은 erlang:timestamp()
를 사용한다.
하지만 erlang에서는 위와 같이 함수의 실행 시간을 측정할 수 있는 timer:tc
함수를 사용해서 보다 간단하게 표현할 수 있다. 인수 갯수는 함수가 인수가 있는 지 없는지, 그리고 외부 모듈이냐 아니냐에 따라 /1
에서 /3
까지 세 가지 종류가 있다. 모두 반환값은 동일하며, Time
은 밀리초 단위이다.
timer:tc(Fun) -> {Time, Value}
timer:tc(Fun, Args) -> {Time, Value}
timer:tc(Mod, Fun, Args) -> {Timer, Value}
예로 삼아 다음과 같이 실행할 수 있다.
1> timer:tc(io, format, ["~p + ~p = ~p~n", [1, 2, 1+2]]).
1 + 2 = 3
{67,ok}
먼저 실행 내용을 보면, timer:tc/2
로 넘겨지는 파라미터에 의해 내부적으로는 apply
함수에 의해 io:format("~p + ~p = ~p~n", [1, 2, 1+2])
과 동일하게 실행된다.
["~p + ~p = ~p~n", [1, 2, 1+2]]
는 io:format/2
에 넘겨지는 파라미터 리스트다.
그 다음의 실행 결과를 보면, 1 + 2 = 3
은 io:format/2
함수 실행의 실행으로 인해 출력된 것이다. {67, ok}
는 io:format/2
를 실행하는데 67ms
가 걸렸으며 그 반환값은 ok
라는 의미이다.
— END OF POST.