- 论坛徽章:
- 0
|
你是通过什么方式 ping 的?直接调用外部的 ping 还是使用 Perl 提供的模板?如果是前者,给 ping 传了什么参数?有没有多余的时间消耗?调用外部程序本身的时间消耗考虑了么?
是通过perl的Net:ing模块ping的
任务在线程之间如何划分的?是每个线程负责一部分机器,还是一个线程处理完一个任务再从总的任务列表中领新的任务(也即线程/进程池的方式)?如果是前者,如何控制 ping 不通导致的超时问题?
是用的线程池(现在用进程池),控制线程(进程)在100个以内
查过什么原因导致 crash 么?是 Perl 的线程实现还是使用方面的问题?
多线程的:
------------------------------------
my $current_thread = 0;
my $max_thread = 100;
foreach( @hosts )
{
if( $current_thread >= $max_thread )
{
foreach my $thread( @thread_array )
{
$thread -> join( );
}
$current_thread = 0;
}
$thread_array[$current_thread] = threads -> new( \&ingHost, $host );
$current_thread ++;
}
多进程的:
------------------------------------
for (@all_nodes) {
wait_for_a_kid() if keys %pid_to_host > $maxprocesses;
if (my $pid = fork) {
## parent does...
$pid_to_host{$pid} = $_;
}
else { # child does
## child does...
ping_a_host($_);
exit 1;
}
}
[ 本帖最后由 Perl_Er 于 2009-6-30 16:54 编辑 ] |
|