请教关于perl Thread 多线程



QUOTE:
原帖由 DQP 于 2009-1-12 09:38 发表



???
迷惑了。。
应该是在最后啊 都join了啊。 你是不是在require近来的那些文件中起了新的进程或线程

use threads;

$thr1= threads->new(\&require1);
$thr2= threads->new(\&require2);
$thr3= threads->new(\&require3);
$thr4= threads->new(\&require4);

sub require1(){
print 1,"\n";
return "return 1 \n";
}

sub require2(){
print 2,"\n";
return "return 2 \n";
}

sub require3(){
print 3,"\n";
return "return 3 \n";
}

sub require4(){
print 4,"\n";
sleep 5;
return "return 4 \n";
}


# all is over.

$thr1->join;
$thr2->join;
$thr3->join;
$thr4->join;

print "你好,我来啦!";


用这个代码执行试下确实是在最后。

不过require文件的话不是了。你说的起了新的进程或线程是什么意思?


QUOTE:
原帖由 MMMIX 于 2009-1-12 09:34 发表

在 Thread 的文档中查查 join 的意思。

是的。
require的文件里的代码有没有创建进程或线程


QUOTE:
原帖由 ynchnluiti 于 2009-1-12 10:10 发表
require的文件里的代码有没有创建进程或线程

线程没有。


进程不确定,require里的文件单独执行也是可以的。怎么样算是创建了新进程?

^_^是不是太傻了。。。。。。
调用了fork, system, ``等


QUOTE:
原帖由 ynchnluiti 于 2009-1-12 10:37 发表
调用了fork, system, ``等

这个没有。
代码基本都是这样的。
#!/usr/bin/perl


# load module

use DBI;
#use strict;



# connect

my $dbh =
        DBI->connect("DBI:mysql:database=ard;host=127.0.0.1",
        "acv", "vbfgh", {'RaiseError' => 1});

$dbh->do("SET NAMES UTF8");

# execute SELECT query

$sql="select key_id,key_name from `t_cv` a";

my $sth = $dbh->prepare("$sql");

$log->info("$sql");

$sth->execute();


our  %key_id_hash;


while (my $hash_ref = $sth->fetchrow_hashref) {
        $key_id         =       $hash_ref->{'key_id'};
        $key_name       =       $hash_ref->{'key_name'};
        $key_id_hash{$key_id}=$key_name;
        $log->debug("add \%key_id_hash $key_id--$key_name");
}


# clean up

$dbh->disconnect();
这段代码好像只输出了log
$log是啥


QUOTE:
原帖由 ynchnluiti 于 2009-1-12 11:26 发表
这段代码好像只输出了log
$log是啥

这个只是日志输出。

重要的在这里our  %key_id_hash;

这个数组。
问个问题为什么要通过require的方式来调用这些脚本呢?


QUOTE:
原帖由 DQP 于 2009-1-12 14:28 发表
问个问题为什么要通过require的方式来调用这些脚本呢?

^_^ 我是刚学习perl的。

只是感觉代码维护方便点,没其它目的。

后来为了这个多线程,没有用require,结果出了这个问题(http://bbs.chinaunix.net/thread-1353012-1-1.html