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

Bulat Ziganshin bulat.ziganshin at gmail.com
Tue Apr 7 10:50:14 EDT 2009

Hello Neil,

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

> Calls to System.Cmd.system, i.e. running external console processes.
> It's a make system I'm writing, so virtually all the time is spent in
> calls to ghc etc.

> To Bulat: I should have been clearer with the spec. The idea is that
> multiple calls to paralell_ can execute, and a function executing
> inside parallel_ can itself call parallel_. For this reason I need one
> top-level thread pool, which requires unsafePerformIO. If I create a
> thread pool every time, I end up with more threads than I want.

this is smth new to solve

i propose to use concept similar to Capability of GHC RTS:

we have one Capability provided by thread calling para and N-1
Capabilities provided by your thread pool. all that we need is to
reuse current thread Capability as part of pool!

para xs = do
  sem <- newQSem
  for xs $ \x -> do
    writeChan chan (x `finally` signalQSem sem)
  tid <- forkIO (executing commands from chan...)
  waitQSem sem
  killThread tid

instead of killThread we really should send pseudo-job (like my
Nothing value) that will led to self-killing of job that gets this

this solution still may lead to a bit more or less than N threads
executed at the same time. your turn!

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

More information about the Haskell-Cafe mailing list