http://qs321.pair.com?node_id=525088

for BrowserUk

I gave it a whirl on WinXP SP2, 2.4GHz, 1 Gig. But I used /stack:1024,0, and modified the code:

use strict; use threads; use threads::shared; use Win32::Console; our $N = 500; our $alldone : shared = 0; sub thread { my( $con, $n) = @_; my $tid = threads->self->tid; my( $y, $x ) = ( ( $tid % 20 ) * 5, int( $tid / 20 ) ); { lock $alldone; $alldone++; } $con->WriteChar( sprintf( '%04d', $_ ), $y, $x ) for 1 .. 3999; } $N = ($ARGV[0]=~/^-N=(\d+)/) ? $1 : 500; my $con = Win32::Console->new( STD_OUTPUT_HANDLE ); $con->Cls; my @threads = (); { lock $alldone; foreach (1.. $N) { push @threads, threads->new( \&thread, $con, 0 ) or die "threads->new failed with: $^E"; print "$_\r"; } print "\n"; } $_->join for @threads;
and squeezed out 1500 (could've gone higher, still had a Gig of pagefile left, but the laptop fan was screaming from the heat!). I'll try on my dual Xeon box this weekend; and also on a major threaded app I've got that uses the threading modules I've been working on.

So does this mean the issue is actually the default stack size, rather than the TLS ? And if so, might tweaking /HEAP have a similar effect ?