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

Reply via email to