ある種のネットワークをシミュレートしていて、チャンのリストを介して値をブロードキャストする関数があるとします。
broadcast :: a -> [Receiver] -> IO ()
broadcast a = mapM_ (send a)
これにより、データが各レシーバーに順番に「送信」されます。代わりに、すべてのレシーバーに非決定論的にブロードキャストしたいと思います。
手がかりをありがとう。
ある種のネットワークをシミュレートしていて、チャンのリストを介して値をブロードキャストする関数があるとします。
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