Skip to content
No description or website provided.
Ruby JavaScript
Find file
Latest commit 9add02d Nov 16, 2011 @jjb note about heroku
Failed to load latest commit information.
app have the controller do stuff. Nov 16, 2011
config thin and threads! Nov 16, 2011
db first commit Nov 16, 2011
doc first commit Nov 16, 2011
lib first commit Nov 16, 2011
log first commit Nov 16, 2011
public first commit Nov 16, 2011
script first commit Nov 16, 2011
test first commit Nov 16, 2011
vendor first commit Nov 16, 2011
.gitignore first commit Nov 16, 2011
Gemfile thin and threads! Nov 16, 2011
Gemfile.lock thin and threads! Nov 16, 2011
Procfile procfile Nov 16, 2011
Rakefile first commit Nov 16, 2011
config.ru first commit Nov 16, 2011
readme.md note about heroku Nov 16, 2011

readme.md

A tiny example of a rails app serving requests asynchronously.

relevant things to look at

  • mycontroller_controller.rb
  • application.rb (config.threadsafe!)
  • Procfile

how to run the server

synchronously: bundle exec thin start

asynchronously: bundle exec thin start --threaded

how to observe synchronous vs. asynchronous behavior

compare behavior when refreshing http://0.0.0.0:3000/mycontroller/slow and http://0.0.0.0:3000/mycontroller/fast. When running without threads, fast will always have to wait for slow. When running with threads, you can refresh fast with wild abandon while waiting for a request to slow to finish.

how to benchmark

ab -n 1000 -c 10 http://0.0.0.0:3000/mycontroller/fast

Threaded mode is successfully asynchronous, but serves fewer requests per second.

does it work asynchronously on heroku?

yes

open questions

  1. Is anyone in the world doing this in production?
  2. How does thin decide how many threads to create?
  3. What is the space complexity of each thread?
  4. Why is threaded slower? (MRI 1.9.2 and 1.9.3)

discussion elsewhere

Something went wrong with that request. Please try again.