Post
Topic
Board Español (Spanish)
Re: Alguien sabe ejecutar generador de carteras en Pc?
by
tiozes
on 26/04/2015, 23:10:42 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.

Buenas, esto lo meto en un documento acabado en .sh y lo ejecuto en linux no?
Mete las las en un archivo de texto o hay que copiar a mano?

Sorry por ser tan cerrado en estos temas.