|
@ -5,7 +5,7 @@ |
|
|
-include("ranks.hrl"). |
|
|
-include("ranks.hrl"). |
|
|
|
|
|
|
|
|
-export([ |
|
|
-export([ |
|
|
start_link/2 |
|
|
|
|
|
|
|
|
start_link/3 |
|
|
, start/3 |
|
|
, start/3 |
|
|
]). |
|
|
]). |
|
|
|
|
|
|
|
@ -19,26 +19,40 @@ |
|
|
]). |
|
|
]). |
|
|
|
|
|
|
|
|
start(Cnt, Num, Limit) -> |
|
|
start(Cnt, Num, Limit) -> |
|
|
ranks:startWork(4) , |
|
|
|
|
|
|
|
|
io:format("start test ~p ~p ~p ~n", [Cnt, Num, erlang:system_time(second)]), |
|
|
|
|
|
ranks:startWork(erlang:system_info(schedulers)) , |
|
|
[ranks:initRank(RankType, ceil(Limit * 0.6), Limit) || RankType <- ?AllRankType], |
|
|
[ranks:initRank(RankType, ceil(Limit * 0.6), Limit) || RankType <- ?AllRankType], |
|
|
doTest(Cnt, Num). |
|
|
|
|
|
|
|
|
doTest(Cnt, Num), |
|
|
|
|
|
doWait(Cnt, 0). |
|
|
|
|
|
|
|
|
doTest(0, _) -> |
|
|
doTest(0, _) -> |
|
|
ok; |
|
|
ok; |
|
|
doTest(Cnt, Num) -> |
|
|
doTest(Cnt, Num) -> |
|
|
start_link(Cnt, Num), |
|
|
|
|
|
|
|
|
start_link(self(), Cnt, Num), |
|
|
doTest(Cnt - 1, Num). |
|
|
doTest(Cnt - 1, Num). |
|
|
|
|
|
|
|
|
-record(state, {id, num}). |
|
|
|
|
|
|
|
|
doWait(Cnt, Sum) -> |
|
|
|
|
|
receive |
|
|
|
|
|
over -> |
|
|
|
|
|
if Cnt == Sum + 1 -> |
|
|
|
|
|
io:format("end test ~p ~p ~n", [Cnt, erlang:system_time(second)]); |
|
|
|
|
|
true -> |
|
|
|
|
|
% io:format("doWait test ~p ~p ~n", [Cnt, Sum + 1]), |
|
|
|
|
|
doWait(Cnt, Sum + 1) |
|
|
|
|
|
end |
|
|
|
|
|
|
|
|
|
|
|
end. |
|
|
|
|
|
|
|
|
|
|
|
-record(state, {parent, id, num}). |
|
|
|
|
|
|
|
|
%% ******************************************** API ******************************************************************* |
|
|
%% ******************************************** API ******************************************************************* |
|
|
start_link(Id, Num) -> |
|
|
|
|
|
gen_srv:start_link(?MODULE, {Id, Num}, []). |
|
|
|
|
|
|
|
|
start_link(Parent, Id, Num) -> |
|
|
|
|
|
gen_srv:start(?MODULE, {Parent, Id, Num}, []). |
|
|
|
|
|
|
|
|
%% ******************************************** callback ************************************************************** |
|
|
%% ******************************************** callback ************************************************************** |
|
|
init({Id, Num}) -> |
|
|
|
|
|
|
|
|
init({Parent, Id, Num}) -> |
|
|
ranks:updateInfo(Id, {?publicInfoPos, {Id, Num, self()}}), |
|
|
ranks:updateInfo(Id, {?publicInfoPos, {Id, Num, self()}}), |
|
|
{ok, #state{id = Id, num = Num}, 0}. |
|
|
|
|
|
|
|
|
{ok, #state{parent = Parent, id = Id, num = Num}, 0}. |
|
|
|
|
|
|
|
|
handleCall(_Msg, _State, _FROM) -> |
|
|
handleCall(_Msg, _State, _FROM) -> |
|
|
{reply, ok}. |
|
|
{reply, ok}. |
|
@ -46,18 +60,10 @@ handleCall(_Msg, _State, _FROM) -> |
|
|
handleCast(_Msg, _State) -> |
|
|
handleCast(_Msg, _State) -> |
|
|
kpS. |
|
|
kpS. |
|
|
|
|
|
|
|
|
handleInfo(timeout, #state{id = Id, num = Num} = State) -> |
|
|
|
|
|
RankType = lists:nth(rand:uniform(3), ?AllRankType), |
|
|
|
|
|
Score = rand:uniform(10000), |
|
|
|
|
|
ranks:updateScore(RankType, Id, {Score, Id}), |
|
|
|
|
|
NewNum = Num - 1, |
|
|
|
|
|
case NewNum < 0 of |
|
|
|
|
|
true -> |
|
|
|
|
|
io:format("test over ~p~n", [Id]), |
|
|
|
|
|
{stop, normal, State}; |
|
|
|
|
|
_ -> |
|
|
|
|
|
{noreply, State#state{num = NewNum}, 0} |
|
|
|
|
|
end; |
|
|
|
|
|
|
|
|
handleInfo(timeout, #state{parent = Parent, id = Id, num = Num} = State) -> |
|
|
|
|
|
loopScore(Num, Id), |
|
|
|
|
|
Parent ! over, |
|
|
|
|
|
{stop, normal, State}; |
|
|
handleInfo(_Msg, _State) -> |
|
|
handleInfo(_Msg, _State) -> |
|
|
kpS. |
|
|
kpS. |
|
|
|
|
|
|
|
@ -67,4 +73,12 @@ terminate(_Reason, _State) -> |
|
|
code_change(_OldVsn, State, _Extra) -> |
|
|
code_change(_OldVsn, State, _Extra) -> |
|
|
{ok, State}. |
|
|
{ok, State}. |
|
|
%% ****************************************************** logic ******************************************************** |
|
|
%% ****************************************************** logic ******************************************************** |
|
|
|
|
|
loopScore(0, _Id) -> |
|
|
|
|
|
ok; |
|
|
|
|
|
loopScore(Num, Id) -> |
|
|
|
|
|
RankType = lists:nth(rand:uniform(3), ?AllRankType), |
|
|
|
|
|
Score = rand:uniform(10000), |
|
|
|
|
|
ranks:updateScore(RankType, Id, {Score, Id}), |
|
|
|
|
|
loopScore(Num - 1, Id). |
|
|
|
|
|
|
|
|
|
|
|
|