Web Parallelism

Looking at different web stacks (ruby mostly), and seeing if/how they work in parallel.

class Plel def call(env) sleep 1 # snooze [200, {'Content-Type'=>'text/plain'}, StringIO.new("Hello World!\n")] end end

run Plel.new /typo:code

typo:code Concurrency Level: 2 Time taken for tests: 1.006 seconds Complete requests: 2 Failed requests: 0 Write errors: 0 Total transferred: 364 bytes HTML transferred: 26 bytes Requests per second: 1.99 #/sec /typo:code

Two requests take one second. Apparrently Rack will process requests in parallel. How does rack do this?

config.ru

require 'paral' run Paral

paral.rb

require 'sinatra/base'

class Paral < Sinatra::Base get '/' do sleep 1 "Hi" end end

/typo:code

typo:code Concurrency Level: 2 Time taken for tests: 1.013 seconds Complete requests: 2 Failed requests: 0 Write errors: 0 Total transferred: 366 bytes HTML transferred: 4 bytes Requests per second: 1.97 #/sec /typo:code

Same result for a sinatra app in rack. Two requests, one second.

went back to the simplest of all webservers, straight webrick

typo:code require 'webrick'

class Paral < WEBrick::HTTPServlet::AbstractServlet

def do_GET(request, response) status, content_type, body = do_stuff_with(request)

response.status = status
response['Content-Type'] = content_type
response.body = body

end

def do_stuff_with(request) sleep 1 return 200, "text/plain", "Hello World" end

end

server = WEBrick::HTTPServer.new({:Port=>8081}) server.mount "/", Paral server.start

/typo:code

typo:code Concurrency Level: 2 Time taken for tests: 1.012 seconds Complete requests: 2 Failed requests: 0 Write errors: 0 Total transferred: 360 bytes HTML transferred: 22 bytes Requests per second: 1.98 #/sec

/typo:code

Still just one second. Whats going on with this?

tags: