[Haskell-cafe] Re: Thread pool in GHC
Dinh Tien Tuan Anh
tuananhbirm at hotmail.com
Tue Sep 6 04:36:40 EDT 2005
Does it mean that the thread pool will "LAUNCH" new thread as long as the
thread count does not exceed a maximum number ?
If it does launch the new thread, then the idea of thread reuse is
completely ignored.
My program creates and kills at most 5 threads at a time, but this process
repeated for an infinite times, so thread reuse would improve the
performance by getting of the overhead of creating new thread.
TuanAnh
>From: genneth <genneth at gmail.com>
>To: Dinh Tien Tuan Anh <tuananhbirm at hotmail.com>
>CC: haskell-cafe at haskell.org
>Subject: Re: [Haskell-cafe] Re: Thread pool in GHC
>Date: Tue, 6 Sep 2005 10:25:15 +0800
>
>I think it would go back to the pool. The finally clause means that
>even if the thread dies from an exception (which, AFAIK, is how kills
>are modelled), the thread count would be restored.
>
>Gen
>
>On 9/6/05, Dinh Tien Tuan Anh <tuananhbirm at hotmail.com> wrote:
> >
> > Its probably too long to bring back this topic, but i have a small
>question.
> >
> > If some threads may never terminate and have to be killed by killThread,
>are
> > they going back to the pool, or we need some twist to force them.
> >
> > Thanks a lot
> > TuanAnh
> >
> > >From: genneth <genneth at gmail.com>
> > >To: haskell-cafe at haskell.org
> > >Subject: [Haskell-cafe] Re: Thread pool in GHC
> > >Date: Thu, 4 Aug 2005 16:47:56 +0000 (UTC)
> > >
> > >Dinh Tien Tuan Anh <tuananhbirm <at> hotmail.com> writes:
> > >
> > > >
> > > >
> > > > Can thread pool be implemented in GHC ?
> > > >
> > > > I have a program that is currently using about 12-15 threads (launch
>and
> > > > kill for infinite times) and when running, especially after Ctrl-C,
>my
> > > > computer got freezed up. And if i ran it several times, the "Stack
> > > > overflows" occurs.
> > >
> > >I made the following a while back. Maybe it's useful...
> > >
> > >limitedThreadsWithChannelMapM :: Integer -> (a -> IO b) -> [a] -> IO
>[MVar
> > >b]
> > >limitedThreadsWithChannelMapM lim ioaction x = do
> > > threadpoolcounter <- atomically ( newTVar 0 )
> > > mapM (throttledFork threadpoolcounter . ioaction) x
> > > where
> > > throttledFork poolcount io = do
> > > atomically ( do
> > > prev <- readTVar poolcount
> > > if prev >= lim then
> > > retry
> > > else writeTVar poolcount (prev+1) )
> > > mvar <- newEmptyMVar
> > > forkIO(
> > > finally
> > > (io >>= putMVar mvar)
> > > (atomically ( readTVar poolcount >>= writeTVar
> > >poolcount .
> > >(subtract 1) ) ) )
> > > return mvar
> > >
> > > >
> > > > Cheers
> > > > TuanAnh
> > > >
> > > > _________________________________________________________________
> > > > Winks & nudges are here - download MSN Messenger 7.0 today!
> > > > http://messenger.msn.co.uk
> > > >
> > >
> > >
> > >
> > >
> > >_______________________________________________
> > >Haskell-Cafe mailing list
> > >Haskell-Cafe at haskell.org
> > >http://www.haskell.org/mailman/listinfo/haskell-cafe
> >
> > _________________________________________________________________
> > Winks & nudges are here - download MSN Messenger 7.0 today!
> > http://messenger.msn.co.uk
> >
> >
_________________________________________________________________
It's fast, it's easy and it's free. Get MSN Messenger 7.0 today!
http://messenger.msn.co.uk
More information about the Haskell-Cafe
mailing list