Speed up the worker accept loop
commitd613f0aaa2758e294e440766c02243a2023b599c
authorEric Wong <normalperson@yhbt.net>
Mon, 4 May 2009 05:11:11 +0000 (3 22:11 -0700)
committerEric Wong <normalperson@yhbt.net>
Mon, 4 May 2009 05:11:11 +0000 (3 22:11 -0700)
tree919d855a14747471a292f27508a2d430ae61e54a
parentea1ef5d2c6d8fe612d620ee18250017da4ae5229
Speed up the worker accept loop

First, reduce no-op fchmod syscalls under heavy traffic.
gettimeofday(2) is a cheaper syscall than fchmod(2).  Since
ctime resolution is only in seconds on most filesystems (and
Ruby can only get to seconds AFAIK), we can avoid fchmod(2)
happening within the same second.  This allows us to cheat on
synthetic benchmarks where performance is measured in
requests-per-second and not seconds-per-request :)

Secondly, cleanup the acceptor loop and avoid nested
begins/loops as much as possible.  If we got ECONNABORTED, then
there's no way the client variable would've been set correctly,
either.  If there was something there, then it is at the mercy
of the garbage collector because a method can't both return a
value and raise an exception.
lib/unicorn.rb