What versions of those modules do you have?
An app that creates 100,000 threads in 15 minutes, each to handle 1 number, is really badly designed. Like building a new train for every journey to work. Inefficient and unsustainable.
Once you detach the thread, it ends. There is no possibility of attempting to "do it twice". And if you did attempt to detach the same thread twice, it does do no harm at all.
This code functions identically with more clarity:
#!/usr/bin/perl use strict; use warnings; use threads; use threads::shared; use Data::Dumper; $|=1; my $MAX_THREADS = 20; my $TERM :shared = 0; $SIG{'INT'} = $SIG{'TERM'} = sub { print("^C captured\n"); $TERM=1; }; sub stuff_thr($) { my ($job)=@_; my $tid=threads->tid(); print "Hi, I am thread: $tid, I need to do something with $job\n"; } sub main() { my @jobs = ( 1 .. 100 ); while (@jobs && ! $TERM) { for( 1 .. $MAX_THREADS - threads->list() ) { my $job = shift(@jobs); last if (! $job); threads->create('stuff_thr',$job)->detach; } @jobs = ( 1 .. 100 ) if @jobs < 10 } sleep 1 while threads->list() > 0; } main();
In reply to Re: threads: work crew memory leak
by BrowserUk
in thread threads: work crew memory leak
by rakzer
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |