如何获取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,"th2" ); $thr3 = threads->create( \&changemode,"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();
解决方法
查看CPAN模块,如
Sys::Info::Device::CPU
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;