Haskell ForkIO 将线程数限制为特定值

Haskell ForkIO limit number of threads to certain value

似乎 ForkIO 创建的线程数与我使用的 Haskell 程序中的内核数一样多

-- | Fork a thread in checker monad.
fork :: Checker a b () -> Checker a b ()
fork act = do
  s0 <- get
  void $ liftIO $ forkIO (curTGroup s0) $ evalChecker act s0

occurs :: Eq a => a -> [a] -> Int
occurs x = length . filter (x==)

https://github.com/PLSysSec/sys/blob/821c4d7cf924e68838c128cbe824be46c9955416/src/Static/Check.hs#L73

Haskel ForkIO 的新手,我想使用 setNumCapabilities 设置线程数量。

尝试添加

let setNumCapabilities = 1

Haskell 对未使用的变量发出警告,但没有任何效果。

如何正确操作?

setNumCapabilities :: Int -> IO () 是一个 函数 。因此,您可以在代码中使用它:

import Control.Concurrent(setNumCapabilities)

fork :: Checker a b () -> Checker a b ()
fork act = do
  s0 <- get
  void $ liftIO $ do
    <b>setNumCapabilities 1</b>
    forkIO (curTGroup s0) $ evalChecker act s0

或其他地方,例如在 main 函数中。