[erlang-questions] Timers for hibernated processes

Max Bourinov bourinov@REDACTED
Wed Nov 23 20:50:47 CET 2011


Hi All!
I have very similar problem: 500K gen_server processes that should get tick
message every X seconds.

I have tried timers module, but since it uses ets I decided to do something
else (my processes lives in gproc which also uses ets - this why I decided
to reduce double ets penalty).

What I did is I created something like this:

-spec start_tik_timer(State :: #state{}) -> #state{}.
start_tik_timer(State) ->
	case State#state.tref of % Here I store ref to the timer process
		% No timer, so we run one
		undef ->
			Self = self(),
			Fun = fun(ThisFun) ->
					Self ! {tik},
					receive after ?TIK_TIME -> ok end, % This is my tick time
					ThisFun(ThisFun)
				  end,
			Pid = spawn(fun() -> Fun(Fun) end),
			State#state{tref = Pid};
		% There is one - do nothing
		_TRef ->
			State
	end.


And I catch ticks like this:

handle_info({tik}, State) ->
 % ..... you code here ...
 {noreply, State};

This approach was suggested by Erlang gurus in another thread.

If you want, please try it! Would be great to know your results!

Best regards,
Max




On Wed, Nov 23, 2011 at 7:30 AM, Barco You <barcojie@REDACTED> wrote:

> I wonder what the difference is between using erlang:start_timer(Timeout,
> Pid, Msg) and directly using the receive-after clause as below:
>
> receive
>        _Event -> ok
> after
>         Timeout -> Pid ! Msg
> end
>
>
>
> On Wed, Nov 23, 2011 at 7:20 AM, Scott Lystig Fritchie <
> fritchie@REDACTED> wrote:
>
>> Jesper Louis Andersen <jesper.louis.andersen@REDACTED> wrote:
>>
>> jla> In *principle* this kind of structure should be extremely
>> jla> scalable. I would try reconstructing the problem without any kind
>> jla> of other subsystem (TCP, Cowboy, ...) first, so you have a smaller
>> jla> failing test case. Then you can probably instrument Erlang/OTP by
>> jla> inspecting the Timer wheel. This will probably tell us a lot more
>> jla> about the limitations of the timer wheel structure in this case.
>>
>> Sounds like an excellent use of DTrace, hint hint.....
>>
>> The hints aren't just for Jesper and Zvi but anyone else who's intersted
>> in measuring the behavior of stuff inside the Erlang VM.  This stuff is
>> working its way into (we hope!) R15B right now.  To read more about it,
>> see:
>>
>>
>> http://www.snookles.com/slf-blog/2011/11/19/dtrace-and-erlang-a-status-report/
>>
>> http://www.snookles.com/slf-blog/2011/11/19/systemtap-and-erlang-a-tutorial/
>>
>> -Scott
>> _______________________________________________
>> erlang-questions mailing list
>> erlang-questions@REDACTED
>> http://erlang.org/mailman/listinfo/erlang-questions
>>
>
>
> _______________________________________________
> erlang-questions mailing list
> erlang-questions@REDACTED
> http://erlang.org/mailman/listinfo/erlang-questions
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20111123/7ea877e9/attachment.htm>


More information about the erlang-questions mailing list