假设我正在模拟某种网络,并且有一个函数可以在 Chans 列表上广播一个值:
broadcast :: a -> [Receiver] -> IO ()
broadcast a = mapM_ (send a)
这将按顺序将数据“发送”到每个接收器。相反,我想以不确定的方式向所有接收器广播。
感谢您提供任何线索。
假设我正在模拟某种网络,并且有一个函数可以在 Chans 列表上广播一个值:
broadcast :: a -> [Receiver] -> IO ()
broadcast a = mapM_ (send a)
这将按顺序将数据“发送”到每个接收器。相反,我想以不确定的方式向所有接收器广播。
感谢您提供任何线索。
只使用 GHC 的并发性怎么样?
broadcast :: a -> [Receiver] -> IO ()
broadcast a = mapM_ (forkIO . send a)
然后确保使用线程 RTS(使用 编译ghc -threaded
)。
http://hackage.haskell.org/package/random-shuffle-0.0.2
broadcast a rs = do
g <- newStdGen
mapM_ (send a) $ shuffle' rs (length rs) g