[GHC] #4262: GHC's runtime never terminates unused worker threads

GHC cvs-ghc at haskell.org
Wed Aug 18 12:53:51 EDT 2010


#4262: GHC's runtime never terminates unused worker threads
---------------------------------+------------------------------------------
    Reporter:  Remi              |       Owner:                                          
        Type:  bug               |      Status:  new                                     
    Priority:  normal            |   Component:  Runtime System                          
     Version:  6.12.3            |    Keywords:  worker thread foreign function interface
    Testcase:                    |   Blockedby:                                          
          Os:  Unknown/Multiple  |    Blocking:                                          
Architecture:  Unknown/Multiple  |     Failure:  Runtime performance bug                 
---------------------------------+------------------------------------------
 When concurrently calling safe FFI functions, worker OS threads are
 created. These threads then never quit.

 The following toy program creates 30k OS threads (which is fine because
 that's exactly what it asks for) which are then never "garbage collected":
 30k threads and over 230g of VM are hanging around until the program
 exits.

 {{{
 {-# LANGUAGE ForeignFunctionInterface #-}
 module Main where

 import Control.Concurrent
 import Control.Monad
 import Foreign.C.Types
 import System.Mem

 foreign import ccall safe sleep :: CUInt -> IO ()

 main = do
     replicateM_ 30000 $ forkIO $ sleep 2
     getLine
     -- do other stuff
 }}}

 P.S. Of course I should simply use threadDelay in this case. The real
 program performs up to a few hundred concurrent fdatasync calls.

-- 
Ticket URL: <http://hackage.haskell.org/trac/ghc/ticket/4262>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler


More information about the Glasgow-haskell-bugs mailing list