If you use a basic process-per-connection model (select/fork/accept), 10 forks per second is not that much. The "classic Unix" Ruby HTTP servers like Unicorn do just that. (Apache 1.3 and at least one 2.x worker module also work this way, but Apache uses some tricks like preforking and recycling workers to make this fast - I'm not sure the Ruby servers do, too.)