[erlang-questions] I'm having a SNAFU moment: timer:sleep/1
Roberto Ostinelli
roberto@REDACTED
Mon Jan 12 11:40:04 CET 2015
Dear list,
I've probably missed out something since I'm not understanding what is
going here.
I'm basically just trying to send messages periodically, though I found out
that I wasn't seeing the behavior that I was expecting. It looks like the
timer has some erratic behavior.
I've stripped out the code to the bare minimum and it looks like this:
-module(test).
-export([sleep_periodical/2]).
-export([sleep_loop/2]).
sleep_periodical(Num, IntervalMs) ->
{Time, _Value} = timer:tc(?MODULE, sleep_loop, [Num, IntervalMs]),
io:format("Finished in ~p microseconds.~n", [Time]).
sleep_loop(Num, IntervalMs) ->
SleepFun = fun(_) -> timer:sleep(IntervalMs) end,
lists:foreach(SleepFun, lists:seq(1, Num)).
When I run this code, I see the following:
Erlang/OTP 17 [erts-6.3] [source] [64-bit] [smp:8:8] [async-threads:10]
[hipe] [kernel-poll:false] [dtrace]
Eshell V6.3 (abort with ^G)
1> c(test).
{ok,test}
2> test:sleep_periodical(1000, 10).
Finished in 12257397 microseconds.
ok
3> test:sleep_periodical(2000, 10).
Finished in 24518070 microseconds.
ok
4> test:sleep_periodical(10000, 1).
Finished in 20000280 microseconds.
ok
5> test:sleep_periodical(20000, 1).
Finished in 40000685 microseconds.
ok
So:
- Looping 1,000 times and sleeping 10 ms each time takes 12.26 seconds
(instead of 10).
- Looping 2,000 times and sleeping 10 ms each time takes 24.52 seconds
(instead of 20).
- Looping 10,000 times and sleeping 1 ms each time takes 20.00 seconds
(instead of 10).
- Looping 20,000 times and sleeping 1 ms each time takes 40.00 seconds
(instead of 20).
Up to 10,000 times it takes 12,16% (1/8) more time, from 10,000 times it
takes 100% (double).
Can some kind soul explain what I'm doing wrong here and how to achieve the
desired results?
I'm on OSX, Erlang 17.4.
Help! ^^_
r.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20150112/9af124bd/attachment.htm>
More information about the erlang-questions
mailing list