On 13 June 2005 11:30, Gracjan Polak wrote:
> My space problems continued... :)
>
> I have some ForeignPtr's, with finalizers (finalizerFree only). And I
> have lazyly produced list of those (yes, there is some unsafePerformIO
> magic behind, but I think I got this right). The problem is I get
> out-of-memory condition because elements get produced faster than
> those consumed are garbage collected.
>
> Example:
>
> list = ...
> mapM_ writeOut list
>
> writeOut :: Ptr Word8
> writeOut dat = do
> hPutBuh handle dat 1024
> -- Control.Concurrent.threadDelay 1000
>
> Uncommenting this line allows gc thread to run finalizers, memory gets
> freed, everything runs smoothly...
>
> As far as I know finalizers are run in separate thread. How do I
> increase priority of this thread so it runs faster?
I presume you're running GHC. There's no way to increase the priority
of a thread - GHC's scheduler doesn't have a concept of priorities.
I would look into whether you can use mallocForeignPtr: this is much
faster than using newForeignPtr with finalizerFree, because the memory
is garbage collected directly and there's no need for a finalizer.
Cheers,
Simon
_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe