#! perl -slw
use strict;
use IO::Socket;
use Time::HiRes qw[ sleep ];
use threads stack_size => 4096; ## Tip: This significantly reduces th
+reads memory usage
$\ = $/ = chr(13) . chr(10);
sub connection {
my $svr;
do {
$svr = IO::Socket::INET->new( 'localhost:12345' );
} until $svr;
while( 1 ) {
my $msg = int( rand 2**30 );
my $reply;
print $svr $msg;
$reply = <$svr> until $reply;
chomp $reply;
warn 'Mismatch' unless $msg + 1 == $reply;
sleep 0.001;
}
}
async( \&connection )->detach for 1 .. 300;
sleep 1000;
The other memory saving tip is: only use those packages you need within your threads, before creating them. Load (require) anything that you only need in main after you've created your threads.
The threaded echo+1 server for your testing: #! perl -slw
use strict;
use threads stack_size => 4096;
use IO::Socket;
$\ = $/ = chr(13).chr(10);
my $lsn = IO::Socket::INET->new( Reuse => 1, Listen => 1e6, LocalPort
+=> 12345 )
or die "Server failed to create listener: $^E";
print "Server listener created";
while( my $client = $lsn->accept ) {
print "Server accepting client connection";
async {
while( my $in = <$client> ) {
chomp $in;
print $client $in + 1;
printf "\rServer echoing client input: '%s'", $in;
}
print "Server shutting down";
shutdown $client, 2;
close $client;
}->detach;
}
With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
|