Simon Marlow wrote:
import Control.Concurrent
import Control.Concurrent.CML
import Control.Monad
main :: IO ()
main = do let numChoices = 2
cs <- replicateM numChoices channel
mapM_ forkIO [replicateM_ (100000 `div` numChoices) $ sync $ transmit
c () | c <- cs]
replicateM_ 100000 $ sync $ choose [receive c (const True) | c <- cs]
Good grief. Can I get a copy of this program? It might be something
simple that we can fix. Just having lots of threads shouldn't be a
performance problem per se, we have benchmarks that create millions of
threads without any problems.
That's all the code you need, along with the cml package from Hackage.
Put the above few lines into GoodGrief.hs (the reply has munged the
indentation slightly), and do:
cabal install cml
ghc --make -threaded GoodGrief.hs
./GoodGrief +RTS -s
That got me the listed results on GHC 6.12.1 (I did use -threaded but
not -N as I was on a single-core machine; I believe the same problem
occurs without -threaded). The problem is in the CML library that the
above code uses.
Neil.
_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe