Linux cloth 2.6.24-24-generic #1 SMP Wed Apr 15 15:54:25 UTC 2009
  i686 GNU/Linux
I followed the instructions on tornado's website and used their script
 
import tornado.httpserver
import tornado.ioloop
import tornado.web
class MainHandler(tornado.web.RequestHandler):
    def get(self):
        self.write("Hello, world")
application = tornado.web.Application([
    (r"/", MainHandler),
])
if __name__ == "__main__":
    http_server = tornado.httpserver.HTTPServer(application)
    http_server.listen(8888)
    tornado.ioloop.IOLoop.instance().start()
 
Unfortunately when I started Tornado it said it couldn't use the epoll() backend and used select() instead. This negatively affects the results, so take the benchmark with a grain of salt.
tornado node thin 30859 40022 40569 tornado Min. 1st Qu. Median Mean 3rd Qu. Max. 14.00 28.00 28.00 28.58 28.00 69.00 node Min. 1st Qu. Median Mean 3rd Qu. Max. 1.00 12.00 20.00 21.91 29.00 176.00 thin Min. 1st Qu. Median Mean 3rd Qu. Max. 10.00 17.00 19.00 21.59 21.00 191.00
 
 
tornado    node    thin 
  17643   24348   22178
tornado
   Min.   1st Qu.   Median   Mean    3rd Qu.    Max. 
  1.000    1.000    1.000    1.028    1.000   12.000 
node
    Min.  1st Qu.   Median   Mean    3rd Qu.    Max. 
  0.0000   0.0000   1.0000   0.7182   1.0000  220.0000 
thin
   Min.   1st Qu.   Median   Mean    3rd Qu.   Max. 
  1.000    1.000    1.000    1.124    1.000   548.000
(didn't bother to make graphs)
tornado    node    thin 
  31825   39732   38424 
tornado
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
   99.0   200.0   244.0   280.2   276.0  6362.0 
node
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
    9.0    59.0   100.0   219.4   142.0 12200.0 
thin
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
   63.0    83.0    86.0   177.1    91.0 24080.0
 
