about threads (here: increasing thread IDs)

Seth Kurtzberg seth at cql.com
Wed Jun 21 11:56:11 EDT 2006


Jost,

At the moment I am only using the thread ID in trace messages, so if I can safely ignore the overflow, then I will so.

Seth

On Wed, 21 Jun 2006 10:28:43 +0200
Jost Berthold <berthold at Mathematik.Uni-Marburg.de> wrote:

> Hi Seth,
> 
> perhaps this will help you, some information from the implementation 
> side concerning your question about threadIDs:
> 
> Related code lived in rts/Schedule.c, has recently moved to 
> rts/Threads.* in the head.
> 
> The ThreadID assigned by the RTS is continuously increasing, and 
> declared to be StgInt32 (32 bits usually).
> So you might get int overflows when running your server for a *fairly* 
> long time. OTOH, depending on what you want to do with the ThreadIDs 
> that forkIO returns, IMHO you could just *ignore* these overflows.
> 
>  From your short description of how the servers work, you know an upper 
> bound on the no. of running threads (6), but not on their time to live.
> So IMHO the worst case scenario would be:
> 	a new thread for a client gets ID n
> 	... 2^32 other server threads get spawned
> 	another new thread for a client gets the same ID n again
> 	...
> 	one of the threads supposed to terminate (killThread n)
> 
> AFAICT, the killThread action will arbitrarily choose one of the two.
> 
> HTH
> Jost
> 
> ------ you wrote ------
> Date: Tue, 20 Jun 2006 23:22:26 -0400
> From: Seth Kurtzberg <seth at cql.com>
> Subject: Re: FFI: number of worker threads?
> To: "Li, Peng" <ringer9cs+ghc at gmail.com>
> Cc: glasgow-haskell-users at haskell.org
> 
> Another related question.  I have some threaded applications running 
> which are servers and run continuously.  A thread is spawned for each 
> new connection, and the thread exits when the client terminates.
> 
> I've noticed that the thread ID increases.  On one process I checked 
> today I am up to thread number 3300.  The number of running threads is 
> not increasing; only six threads are running on this particular process. 
>   The threads are cleaned up and exit.  The thread _ID_ is continually 
> increasing.
> 
> Is this going to cause a problem when the thread ID exceeds some value? 
>   Do I have to force the server process to recycle periodically?
> ...
> 
> 
> 


More information about the Glasgow-haskell-users mailing list