Thanks, I'll keep that in mind.

I wrote a better example of what I'm trying to do: https://gist.github.com/1420742 It runs worse with multiple threads than it does with one (both time-wise and memory-wise), I think due to the bug Simon described in that commit.

But that bug aside, is it possible to write a multithreaded application in Haskell that sends large amounts of data from one thread to the other without getting crushed by GC? I've looked into the garbage collector a bit, and this seems problematic.

Mike S Craig


On Thu, Dec 1, 2011 at 2:38 PM, Edward Z. Yang <ezyang@mit.edu> wrote:
OK. A common mistake when using channels is forgetting to make sure
all of the informaiton is fully evaluated in the worker thread, which then
causes the writer thread to spend all its time evaluating thunks.

Edward

Excerpts from Michael Craig's message of Thu Dec 01 13:17:57 -0500 2011:
> Excellent! Glad this has been sorted out upstream.
>
> Edward, to answer your question regarding blocking database calls: I'm
> using mongoDB to log events that come into a WAI webapp. The writes to
> mongo are blocking, so I'd like to run them in parallel with the webapp.
> The webapp would push the data into a Chan and the mongo writer would read
> from the Chan and make the writes sequentially (using the Chan as a FIFO
> between parallel threads). This would allow for request rates to
> temporarily rise above mongo's write rate (of course with an expanded
> memory footprint during those bursts).
>
> Mike S Craig
>
>
> On Thu, Dec 1, 2011 at 12:10 PM, Felipe Almeida Lessa <
> felipe.lessa@gmail.com> wrote:
>
> > On Thu, Dec 1, 2011 at 2:40 PM, Edward Z. Yang <ezyang@mit.edu> wrote:
> > > Simon Marlow investigated, and we got this patch out:
> >
> > Nice work, guys!  Hope it gets included in the glourious GHC 7.4 =D.
> >
> > Cheers,
> >
> > --
> > Felipe.
> >