danmcb has asked for the wisdom of the Perl Monks concerning the following question:
I have a test script which I am using to exercise an application. The test app creates a new thread each second, each thread waits for a random period before exiting. I want to be able to create as many threads as possible before hitting memory limits. This ought to be pretty much unlimited as threads end more or less as quickly as they are created, once things hit steady state
In practice, it seems that threads don't actually get cleaned up when the thread exits, and thread->create fails after a few hundred. I can improve this by twaeking the stack size, but I'd like to make it that the thread memory is really free after exiting.
Here is a trimmed down version of the code ...
#!/usr/bin/perl -w use strict; use threads; for (my $i = 0; $i < 5000; $i++){ my $thr = threads->create( \&_run_thread, $i ); sleep 1; } # make sure all threads complete while ( threads->list(threads::running) ){ sleep 1; }; print "ok.\n"; sub _run_thread { my ($id) = @_; print "starting thread $id ...\n"; sleep 4; print "exiting thread $id.\n"; return; }
In the real code, the sleep 4 is actually a random time, and of course the thread does other uninteresting stuff. When the code ends, the app prints a warning that threads were all finished but not joined and not detached. If I somehoe try to join the finished ones in the main loop, will I get back the memory from those?
(In practice setting stack size to 32k seems to make this not a real issue, but I'm ever curious ...)
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: using many threads and conserving stack size
by BrowserUk (Patriarch) on Nov 12, 2008 at 13:23 UTC | |
by danmcb (Monk) on Nov 12, 2008 at 14:33 UTC | |
by BrowserUk (Patriarch) on Nov 12, 2008 at 17:44 UTC | |
by gone2015 (Deacon) on Nov 12, 2008 at 16:00 UTC | |
by danmcb (Monk) on Nov 12, 2008 at 16:04 UTC | |
by gone2015 (Deacon) on Nov 12, 2008 at 16:26 UTC | |
| |
by danmcb (Monk) on Nov 12, 2008 at 13:58 UTC |