|
@ -1,22 +1,11 @@ |
|
|
-module(tc). |
|
|
|
|
|
|
|
|
-module(utTc). |
|
|
|
|
|
|
|
|
-compile([export_all, nowarn_unused_function, nowarn_unused_vars, nowarn_export_all]). |
|
|
-compile([export_all, nowarn_unused_function, nowarn_unused_vars, nowarn_export_all]). |
|
|
|
|
|
|
|
|
%% 单进程循环测试:LoopTimes是循环次数 |
|
|
%% 单进程循环测试:LoopTimes是循环次数 |
|
|
%% tc:t(Module, Function, ArgsList, LoopTimes). |
|
|
|
|
|
|
|
|
%% utTc:ts(Module, Function, ArgsList, LoopTimes). |
|
|
%% 多进程并发测试:SpawnProcessesCount是并发的进程数 |
|
|
%% 多进程并发测试:SpawnProcessesCount是并发的进程数 |
|
|
%% tc:ct(Module, Function, ArgsList, SpawnProcessesCount). |
|
|
|
|
|
|
|
|
|
|
|
t1() -> |
|
|
|
|
|
[ X || X <- lists:seq(1, 5000) ]. |
|
|
|
|
|
|
|
|
|
|
|
t2() -> |
|
|
|
|
|
t2(lists:seq(1, 5000)). |
|
|
|
|
|
t2([H|T]) -> |
|
|
|
|
|
H, |
|
|
|
|
|
t2(T); |
|
|
|
|
|
t2([]) -> |
|
|
|
|
|
ok. |
|
|
|
|
|
|
|
|
%% utTc:tm(Module, Function, ArgsList, SpawnProcessesCount). |
|
|
|
|
|
|
|
|
tc(M, F, A) -> |
|
|
tc(M, F, A) -> |
|
|
{Microsecond, _} = timer:tc (M, F, A), |
|
|
{Microsecond, _} = timer:tc (M, F, A), |
|
@ -38,7 +27,7 @@ distribution([], _Aver, Greater, Less) -> |
|
|
%% test: one process test N times |
|
|
%% test: one process test N times |
|
|
%% =================================================================== |
|
|
%% =================================================================== |
|
|
|
|
|
|
|
|
t(M, F, A, N) -> |
|
|
|
|
|
|
|
|
ts(M, F, A, N) -> |
|
|
{Max, Min, Sum, Aver, Greater, Less} = loop ({M, F, A}, N), |
|
|
{Max, Min, Sum, Aver, Greater, Less} = loop ({M, F, A}, N), |
|
|
io:format ("=====================~n"), |
|
|
io:format ("=====================~n"), |
|
|
io:format ("execute [~p] times of {~p, ~p, ~p}:~n", [N, M, F, A]), |
|
|
io:format ("execute [~p] times of {~p, ~p, ~p}:~n", [N, M, F, A]), |
|
@ -79,7 +68,7 @@ loop({_M, _F, _A}, N, _I, Max, Min, Sum, List) -> |
|
|
%% Concurrency test: N processes each test one time |
|
|
%% Concurrency test: N processes each test one time |
|
|
%% =================================================================== |
|
|
%% =================================================================== |
|
|
|
|
|
|
|
|
ct(M, F, A, N) -> |
|
|
|
|
|
|
|
|
tm(M, F, A, N) -> |
|
|
{Max, Min, Sum, Aver, Greater, Less} = cloop ({M, F, A}, N), |
|
|
{Max, Min, Sum, Aver, Greater, Less} = cloop ({M, F, A}, N), |
|
|
io:format ("=====================~n"), |
|
|
io:format ("=====================~n"), |
|
|
io:format ("spawn [~p] processes of {~p, ~p, ~p}:~n", [N, M, F, A]), |
|
|
io:format ("spawn [~p] processes of {~p, ~p, ~p}:~n", [N, M, F, A]), |
|
@ -93,14 +82,14 @@ ct(M, F, A, N) -> |
|
|
|
|
|
|
|
|
cloop({M, F, A}, N) -> |
|
|
cloop({M, F, A}, N) -> |
|
|
CollectorPid = self(), |
|
|
CollectorPid = self(), |
|
|
ok = loop_spawn({M, F, A}, CollectorPid, N), |
|
|
|
|
|
|
|
|
ok = loopSpawn({M, F, A}, CollectorPid, N), |
|
|
collector(0, 0, 0, N, 1, []). |
|
|
collector(0, 0, 0, N, 1, []). |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
loop_spawn({M, F, A}, CollectorPid, N) when N > 0 -> |
|
|
|
|
|
|
|
|
loopSpawn({M, F, A}, CollectorPid, N) when N > 0 -> |
|
|
spawn_link(fun() -> worker({M, F, A}, CollectorPid) end), |
|
|
spawn_link(fun() -> worker({M, F, A}, CollectorPid) end), |
|
|
loop_spawn({M, F, A}, CollectorPid, N - 1); |
|
|
|
|
|
loop_spawn(_, _, 0) -> |
|
|
|
|
|
|
|
|
loopSpawn({M, F, A}, CollectorPid, N - 1); |
|
|
|
|
|
loopSpawn(_, _, 0) -> |
|
|
ok. |
|
|
ok. |
|
|
|
|
|
|
|
|
collector(Max, Min, Sum, N, I, List) when N >= I -> |
|
|
collector(Max, Min, Sum, N, I, List) when N >= I -> |