I want to do a 'long running' - (takes about 0.5 seconds to execute) task in a thread in a Sinatra web server.

The web response takes about 20 ms, so if I get busy then threads will pile up...

So I was thinking that I would do it synch if I get busy..

if (running_thread_count > 10)
    stuff_that_takes_a_second()
else
    Thread.new do
        stuff_that_takes_a_second()
    end
end

How do you get the number of running threads (I want the the number of threads launched, and not done running yet) - how do you code running_thread_count?

def running_thread_count
 return Thread.list.count
end

Or do I need to check for threads that are running? i.e. when a thread is finished running, will it stop coming back in the Thread.list?

I don't want to call join as that would defeat the purpose - which is to return quickly unless we are backed up with lots of threads working.

Edit
Report