- modify #log to embed a timestamp in each logged message - add Reactor#oneshot_timer_at for scheduling messages to fire at an exact time - change Reactor#next_tick so that it uses Array#shift instead of Array#pop for getting the next scheduled proc to run. this changes the order from LIFO to FIFO which is what it should have been from the start
A socket can be registered with the reactor but have all of its events disabled (read/write) In that case we do not want to call poll because it will return instantly and burn up the CPU for doing no work.
Results in a *vast* performance improvement when the timers list grows beyond a few hundred timers. SortedSet sucks.