15

Perl で CPU またはコアの数を取得する方法。私はこれを決定し、動的にスレッド数を作成したいと考えています。以下に、3 つのスレッドを作成しました。しかし、そのマシンのコア数に基づいてスレッドを作成したいと考えています。

#!/usr/bin/perl -w
use threads;
use Thread::Semaphore;

my $semaphore = Thread::Semaphore->new();`enter code here`
my $cur_dir   = "D:\\qout";
opendir( CURDIR, "$cur_dir" );
my @file_list : shared = readdir(CURDIR);
closedir(CURDIR);


$thr1 = threads->create( \&changemode, \@file_list, "th1" );
$thr2 = threads->create( \&changemode, \@file_list, "th2" );
$thr3 = threads->create( \&changemode, \@file_list, "th3" );

sub &changemode {

    my ($file_list) = shift;
    my ($message)   = shift;
    my ($i)         = shift;
    while (@{$file_list}) {
        my $fname;
        $semaphore->down();
        if (@{$file_list}) {
            $fname = shift(@{$file_list});
        }
        $semaphore->up();
        print("$message got access of $fname\n");
        system ("csh -fc \"chmod +w $fname\"");
        #sleep (2);
    }
}


$thr1->join();

$thr2->join();

$thr3->join();
4

7 に答える 7

15

Sys::Info::Device::CPUなどの CPAN モジュールをチェックしてください。

   use Sys::Info;
   use Sys::Info::Constants qw( :device_cpu );
   my $info = Sys::Info->new;
   my $cpu  = $info->device( CPU => %options );

   printf "CPU: %s\n", scalar($cpu->identify)  || 'N/A';
   printf "CPU speed is %s MHz\n", $cpu->speed || 'N/A';
   printf "There are %d CPUs\n"  , $cpu->count || 1;
   printf "CPU load: %s\n"       , $cpu->load  || 0;
于 2013-08-21T14:38:13.107 に答える
4

getNumCpus方法はSys::CpuAffinity、さまざまなオペレーティング システムと構成で機能します。

于 2013-08-21T16:08:01.027 に答える
2

Sys::InfoまたはSys::CpuAffinityを使用できない Windows ベースのユーザー向けの代替手段:

my $numberofcores = $ENV{"NUMBER_OF_PROCESSORS"};
于 2016-03-15T12:08:57.810 に答える