[Haskell-cafe] Re: Joels Time Leak
Simon Marlow
simonmar at microsoft.com
Wed Jan 4 05:49:53 EST 2006
On 03 January 2006 17:32, Chris Kuklewicz wrote:
> Thanks for the answer, but I should I written a longer comment. I have
> added such a longer comment below:
>
> Simon Marlow wrote:
>> Chris Kuklewicz wrote:
>>
>>> Another comment: between 1000's of threads and writing a custom
>>> continuation based scheduler, what about using a thread pool? Does
>>> anyone have a library with a "fork-IO-Pool" command?
>>
>>
>> You don't need a thread pool, because threads are so cheap. Thread
>> pools are just a workaround for lack of lightweight concurrency.
>>
>> Cheers,
>> Simon
>>
>
> Since the round-robin scheduler has (0.02 * N) seconds of delay for N
> therads, then one could trade off latency between time spent waiting
> for the thread pool to start a job and time spend running the job and
> getting interrupted.
>
> In the limit of 1 worker thread, all the latency is waiting to get
> run, and there are no interruptions, so the time taken *while
> running* is very short. With 10 threads, there can be a delay to
> start, and each interruption adds 0.2 seconds to the job's run time
> once it has started.
>
> For a server, the client requests queue up and wait for room in the
> thread pool, and the pool is kept small enough that the
> round-robin-schedular-delay keeps requests from timing out while being
> serviced. Otherwise 1000 client requests would cause 20 seconds of
> reschedule penalty for all threads and they could all timeout. With a
> thread pool, one can drop threads that have been waiting for too long
> instead of running them, so those threads will timeout. But the pool
> keeps servicing at least some of the client requests on time.
>
> All hypothetical to me, of course.
I see - you want to use a thread pool as a way of restricting
parallelism, so as to control latency. Good idea, it would make a
useful library.
Cheers,
Simon
More information about the Haskell-Cafe
mailing list