title: Tornado take full CPU usage and concurrent is not acceptable
body: <p>Code is very simple, this basic usage of Tornado:</p>
  
  <pre><code>class JustHandler(tornado.web.RequestHandler):
      def get(self):
          self.write('just get.')
  
  application = tornado.web.Application([
      (r"/just", JustHandler),
  ])
  application.listen(7777)
  tornado.ioloop.IOLoop.current().start()
  </code></pre>
  
  <p>And I wrote a simple client to send requests:</p>
  
  <pre><code>class Request:
      def GetEmpty(self):
          try:
              req  = urllib2.Request('http://localhost:7777/just')
              resp = urllib2.urlopen(req, timeout = 15)
              file = resp.read()
              print 'Get empty'
          except Exception,e:
              print str(e)
  
  def ReqThread():
      req = Request()
      while True:
          req.GetEmpty()
  
  if __name__ == "__main__":
      print 'start.'
      threads = []
      for i in range(0, 100):
          thread = threading.Thread(target = ReqThread)
          thread.start()
          threads.append(thread)
  
      for thread in threads:
          thread.join()
      print 'end.'
  </code></pre>
  
  <p>As you see, I open 100 threads, each thread with loop request without end, then check CPU usage of tornado, it goes 100%.</p>
  
  <p>If I try to increase threads count, some request will fail with timeout.</p>
  
  <p>What am I wrong? Tornado should accept high requsets at a same time.</p>
  
  <p>My system is Ubuntu 14.04, Tornado version is 4.2.1, CPU is E3 1231 v3.</p>