use strict;
use warnings;
use feature qw(say);
use Storable qw(freeze thaw);
my $data = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_';
# $data .= $data for 1..10; # 2^16 65536
# $data .= $data for 1..11; # 2^17 131072
# $data .= $data for 1..12; # 2^18 262144
# $data .= $data for 1..13; # 2^19 524288
# $data .= $data for 1..14; # 2^20 1048576
# $data .= $data for 1..15; # 2^21 2097152
# $data .= $data for 1..16; # 2^22 4194304
# $data .= $data for 1..17; # 2^23 8388608
# $data .= $data for 1..18; # 2^24 16777216
# $data .= $data for 1..19; # 2^25 33554432
# $data .= $data for 1..20; # 2^26 67108864
# $data .= $data for 1..21; # 2^27 134217728
# $data .= $data for 1..22; # 2^28 268435456
# $data .= $data for 1..23; # 2^29 536870912
$data .= $data for 1..24; # 2^30 1073741824
say 'data : '.length($data);
my $frozen = freeze(\$data);
my $thawed = thaw($frozen);
say 'frozen : '.length($frozen);
say 'thawed : '.length($$thawed);
# simulate busy loop: 4102 megabytes in top; 2.106 seconds
# 1 for 1..400_000_000;
__END__
data : 1073741824
frozen : 1073741844
thawed : 1073741824
####
use strict;
use warnings;
use feature qw(say);
use Sereal::Encoder qw(encode_sereal);
use Sereal::Decoder qw(decode_sereal);
my $data = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_';
# $data .= $data for 1..10; # 2^16 65536
# $data .= $data for 1..11; # 2^17 131072
# $data .= $data for 1..12; # 2^18 262144
# $data .= $data for 1..13; # 2^19 524288
# $data .= $data for 1..14; # 2^20 1048576
# $data .= $data for 1..15; # 2^21 2097152
# $data .= $data for 1..16; # 2^22 4194304
# $data .= $data for 1..17; # 2^23 8388608
# $data .= $data for 1..18; # 2^24 16777216
# $data .= $data for 1..19; # 2^25 33554432
# $data .= $data for 1..20; # 2^26 67108864
# $data .= $data for 1..21; # 2^27 134217728
# $data .= $data for 1..22; # 2^28 268435456
# $data .= $data for 1..23; # 2^29 536870912
$data .= $data for 1..24; # 2^30 1073741824
say 'data : '.length($data);
my $frozen = encode_sereal(\$data);
my $thawed = decode_sereal($frozen);
say 'frozen : '.length($frozen);
say 'thawed : '.length($$thawed);
# simulate busy loop: 3078 megabytes in top; 1.549 seconds
# 1 for 1..400_000_000;
__END__
data : 1073741824
frozen : 1073741837
thawed : 1073741824
####
use strict;
use warnings;
use feature qw(say);
use Sereal::Encoder qw(encode_sereal);
use Sereal::Decoder qw(decode_sereal);
my $data = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_';
# $data .= $data for 1..10; # 2^16 65536
# $data .= $data for 1..11; # 2^17 131072
# $data .= $data for 1..12; # 2^18 262144
# $data .= $data for 1..13; # 2^19 524288
# $data .= $data for 1..14; # 2^20 1048576
# $data .= $data for 1..15; # 2^21 2097152
# $data .= $data for 1..16; # 2^22 4194304
# $data .= $data for 1..17; # 2^23 8388608
# $data .= $data for 1..18; # 2^24 16777216
# $data .= $data for 1..19; # 2^25 33554432
# $data .= $data for 1..20; # 2^26 67108864
# $data .= $data for 1..21; # 2^27 134217728
# $data .= $data for 1..22; # 2^28 268435456
# $data .= $data for 1..23; # 2^29 536870912
$data .= $data for 1..24; # 2^30 1073741824
say 'data : '.length($data);
my $frozen = encode_sereal(\$data, { compress => 1 });
my $thawed = decode_sereal($frozen);
say 'frozen : '.length($frozen);
say 'thawed : '.length($$thawed);
# simulate busy loop: 2104 megabytes in top; 2.170 seconds
# 1 for 1..400_000_000;
__END__
data : 1073741824
frozen : 52428830
thawed : 1073741824
####
use strict;
use warnings;
use MCE::Child;
use MCE::Channel;
my $chnl = MCE::Channel->new();
sub agent_task {
my ($id, @args) = @_;
my $data = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_';
$data .= $data for 1..24; # 2^30 1073741824
# agent >> parent (via send2)
$chnl->send2({ id => $id, data => $data });
}
my %procs;
MCE::Child->init( void_context => 1, posix_exit => 1 );
$procs{$_} = MCE::Child->create('agent_task', $_, 'arg1', 'argN') for 1..2;
while (keys %procs) {
# parent << agent (via recv2)
my $ret = $chnl->recv2;
( delete $procs{ $ret->{id} } )->join;
printf "Agent %d: %d\n", $ret->{id}, length $ret->{data};
}
__END__
Agent 1: 1073741824
Agent 2: 1073741824