请看下面这个Haskell程序(我主要是为了学习而做的):
当我运行它时,内存很快就升高到几个GB的大小。我尝试了各种组合,以确保丢弃中间计算的结果(即打印操作)。为什么它仍然在泄漏空间?
import qualified Control.Concurrent.MSem as Sem
import System.Environment (getArgs)
import Control.Concurrent (forkIO)
import Control.Monad
-- Traverse with maximum n threads
parallelTraverse :: Foldable a => Int -> (b -> IO()) -> a b -> IO ()
parallelTraverse n action values = do
sem <- Sem.new n
forM_ values $ \value -> Sem.with sem (forkIO $ action value)
main :: IO ()
main = do
args <- getArgs
let nThreads = read . head $ args :: Int
parallelTraverse nThreads print [(1::Int)..]
当我运行它时,内存很快就升高到几个GB的大小。我尝试了各种组合,以确保丢弃中间计算的结果(即打印操作)。为什么它仍然在泄漏空间?