socketry / async

An awesome asynchronous event-driven reactor for Ruby.
MIT License
2.04k stars 85 forks source link

Prefer `IO::Event::Timers`. #316

Closed ioquatix closed 1 month ago

ioquatix commented 1 month ago

Minor performance improvement as demonstrated by attached benchmarks.

samuel@Sakura ~/D/s/a/b/timers (use-io-event-timers)> bundle exec ./after_0.rb 
ruby 3.3.0 (2023-12-25 revision 5124f9ac75) [arm64-darwin23]
Warming up --------------------------------------
       Timers::Group    65.144k i/100ms
   IO::Event::Timers   130.653k i/100ms
Calculating -------------------------------------
       Timers::Group    658.748k (± 0.5%) i/s -    716.584k in   1.087824s
   IO::Event::Timers      1.304M (± 0.2%) i/s -      1.307M in   1.002237s

Comparison:
   IO::Event::Timers:  1303616.9 i/s
       Timers::Group:   658747.8 i/s - 1.98x  slower

samuel@Sakura ~/D/s/a/b/timers (use-io-event-timers)> bundle exec ./after_n.rb
ruby 3.3.0 (2023-12-25 revision 5124f9ac75) [arm64-darwin23]
Warming up --------------------------------------
       Timers::Group    13.982k i/100ms
   IO::Event::Timers    21.496k i/100ms
Calculating -------------------------------------
       Timers::Group    154.925k (± 0.8%) i/s -    167.784k in   1.083072s
   IO::Event::Timers    230.674k (± 0.3%) i/s -    236.456k in   1.025078s

Comparison:
   IO::Event::Timers:   230673.5 i/s
       Timers::Group:   154925.4 i/s - 1.49x  slower

samuel@Sakura ~/D/s/a/b/timers (use-io-event-timers)> bundle exec ./after_cancel.rb
ruby 3.3.0 (2023-12-25 revision 5124f9ac75) [arm64-darwin23]
Warming up --------------------------------------
       Timers::Group   101.792k i/100ms
   IO::Event::Timers   232.860k i/100ms
Calculating -------------------------------------
       Timers::Group      1.006M (± 1.0%) i/s -      1.018M in   1.011619s
   IO::Event::Timers      2.544M (± 3.2%) i/s -      2.561M in   1.008093s

Comparison:
   IO::Event::Timers:  2543646.0 i/s
       Timers::Group:  1006322.4 i/s - 2.53x  slower

This was always on the cards, I just hadn't gotten around to it.

Types of Changes

Contribution