SPARKS: 0 (0 converted, 0 overflowed, 0 dud, 0 GC'd, 0 fizzled)
Is that to be expected?
-db
On Fri, Oct 27, 2023 at 07:43:07PM +0100, Tom Ellis wrote:On Fri, Oct 27, 2023 at 11:36:53AM -0700, David Banas wrote:
What is the simplest way to translate a non-monadic line of Haskell code, such as:
res = map foo xs `using` parList rseq
For use in the IO monad?
This doesn’t work:
res <- mapM fooM xs `using` parTraversable rseq
The docs for Control.Parallel.Strategies say "The parallel tasks
evaluated by a Strategy may have no side effects. For
non-deterministic parallel programming, see Control.Concurrent."[1].
So I guess you should look into Control.Concurrent[2].
For a more friendly interface: https://hackage.haskell.org/package/async-2.2.4/docs/Control-Concurrent-Async.htmlIf the number of concurrent tasks is reasonably modest, a good fit couldbe `mapConcurrently`.For much larger numbers of tasks, it is best to run the jobs at abounded concurrency, which may bring a BoundedChan to which the items toprocess are written, another to which results are written and a set ofthreads that do the processing, repeatedly reading more data until thechannel is drained. *The* book on subject is: https://simonmar.github.io/pages/pcph.html-- Viktor._______________________________________________Haskell-Cafe mailing listTo (un)subscribe, modify options or view archives go to:http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafeOnly members subscribed via the mailman list are allowed to post.