[Haskell-cafe] Re[2]: Parallel combinator, performance advice

Bulat Ziganshin bulat.ziganshin at gmail.com
Tue Apr 7 11:22:55 EDT 2009


Hello Neil,

Tuesday, April 7, 2009, 6:13:29 PM, you wrote:

> Consider a thread pool with 2 threads and the call parallel_ [parallel_ [b,c],a]

> You get the sequence:
> enqueue (parallel_ [b,c])
> a
> wait on parallel_ [b,c]

> While you are executing a, a thread pool starts:
> enqueue b
> c
> wait for b

> Now you have all the threads waiting, and no one dealing with the
> thread pool. This results in deadlock.

i think the only way to solve this problem is to create one more
thread each time. let's see: on every call to para you need to alloc
one thread to wait for jobs completion. so on each nested call to para
you have minus one worker thread. finally you will eat them all!

so you need to make fork: one thread should serve jobs and another one
wait for completion of this jobs bucket. and with killItself flag you
will finish superfluous thread JIT


-- 
Best regards,
 Bulat                            mailto:Bulat.Ziganshin at gmail.com



More information about the Haskell-Cafe mailing list