Skip to content

Instantly share code, notes, and snippets.

@amtal
Created November 9, 2010 21:43
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save amtal/669875 to your computer and use it in GitHub Desktop.
Save amtal/669875 to your computer and use it in GitHub Desktop.
*.erl
::::::::::::::
t.erl
::::::::::::::
-module(t).
-export([go/0, l/0, run/1]).
%% @doc load
l()->
net_adm:ping('a@ak-desktop'),
net_adm:ping('b@ak-desktop'),
net_adm:ping('c@ak-desktop').
go()->
[{N,timer:tc(fun run/2, [N,10000 div N])} || N<-[1,5,20]].
run(N,R)->
[rpc:parallel_eval([{t, run, [R]}]) || _<-lists:seq(1,N)].
run(R)->
[X=server:foz(X) || X<-lists:seq(1,R)],
ok.
::::::::::::::
server.erl
::::::::::::::
-module(server).
-export([start_link/0, foz/1]).
-behaviour(gen_server).
-export([init/1, handle_call/3, handle_cast/2, handle_info/2,
terminate/2, code_change/3]).
-vsn(0).
-record(ate,
{ field = undefined :: any() %
}).
-define(NAME,{global,?MODULE}).
%% @doc See: {@link start/1}
start_link() -> gen_server:start_link(?NAME, ?MODULE, {}, []).
foz(X)->gen_server:call(?NAME, {foz,X}).
%% @hidden gen_server
init(_Args) ->
St = #ate{
field = undefined
},
{ok, St}.
%% @hidden gen_server
handle_call({foz,X}, From, St) ->
worker_sup:spawn(From, X),
%worker:start_link(From, X),
{noreply, St}.
%% @hidden gen_server
handle_cast(_Request, St) ->
{stop, unimplemented, St}.
%% @hidden gen_server
handle_info(_Info, St) ->
{stop, unimplemented, St}.
%% @hidden gen_server
terminate(_Reason, _St) ->
ok.
%% @hidden gen_server
code_change(_OldVsn, St, _Extra) ->
{ok, St}.
::::::::::::::
sup.erl
::::::::::::::
-module(sup).
-behaviour(supervisor).
-export([start_link/0, init/1]).
-vsn(0).
start_link() ->
supervisor:start_link(?MODULE, {}).
%% @hidden supervisor
init(_Args) ->
Restart = {rest_for_one, 2, 5},
C0 = { server
, {server,start_link,[]}
, permanent
, 200 % ms
, worker
, [server]
},
C1 = { worker_sup
, {worker_sup,start_link,[]}
, permanent
, 200 % ms
, worker
, [worker_sup]
},
{ok,{Restart,[C0,C1]}}.
::::::::::::::
worker.erl
::::::::::::::
-module(worker).
-export([start_link/2]).
start_link(ReturnTo, X) ->
{ok,spawn(fun()->foz(ReturnTo,X) end)}.
foz(ReturnTo, X) ->
gen_server:reply(ReturnTo, X).
::::::::::::::
worker_sup.erl
::::::::::::::
-module(worker_sup).
-behaviour(supervisor).
-export([start_link/0, init/1, spawn/2]).
-vsn(0).
%% @doc Short description.
start_link() ->
supervisor:start_link({local,?MODULE}, ?MODULE, {}).
%% @hidden supervisor
init(_Args) ->
Restart = {simple_one_for_one, 2, 5},
C0 = { worker
, {worker,start_link,[]}
, temporary
, 200 % ms
, worker
, [worker]
},
{ok,{Restart,[C0]}}.
spawn(ReturnTo,X)->
supervisor:start_child(?MODULE, [ReturnTo,X]).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment