Post
Topic
Board Español (Spanish)
Re: Alguien sabe ejecutar generador de carteras en Pc?
by
dserrano5
on 25/04/2015, 21:48:04 UTC
Pensaba esta mañana que transformar ese programita en multicore es un ejercicio bastante interesante

Code:
use warnings;
use strict;
use Fcntl;
use Time::HiRes qw/time/;
use Parallel::ForkManager;

my $runtime = 5;  ## desired runtime, in seconds
my $nprocs = 0;

sub gen_pks {
    my ($npks) = @_;
    my @pks;
   
    sysopen my $fd, '/dev/urandom', O_RDONLY;
    for (1..$npks) {
        my $read = sysread $fd, my $buf, 256/8 or die "sysread: $!";
        die 'EOF' unless $read;
        warn 'short read' if 256/8 != length $buf;
        push @pks, $buf
    }
    close $fd;

    return \@pks;
}

sub ncpus {
    open my $fd, '<', '/proc/cpuinfo' or die "open: $!";
    my $ncpus = grep { /^processor/ } <$fd>;
    close $fd;
    return $ncpus;
}

my $t0 = time;
my $pm = Parallel::ForkManager->new ($nprocs or ncpus);
$pm->set_waitpid_blocking_sleep (0);
$pm->run_on_finish (sub {
    my $data = pop;
    printf "%s\n", unpack 'H*', $_ for @$data;
});

while (1) {
    last if time-$t0 > $runtime;
    $pm->start and next;
    $pm->finish (0, gen_pks 1e3);
}
$pm->wait_all_children;

En la línea del "my $runtime" indicamos cuánto tiempo queremos que esto se ejecute. En la siguiente línea indicamos el número de procesos concurrentes que queremos, idealmente el número de cores que tiene la máquina. En sistemas linux se puede dejar a 0 y se detecta solo.