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 <[EMAIL PROTECTED]>
To: Dinh Tien Tuan Anh <[EMAIL PROTECTED]>
CC: haskell-cafe@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 <[EMAIL PROTECTED]> 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 <[EMAIL PROTECTED]>
> >To: haskell-cafe@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@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
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe