Perl与Java中的多线程

时间:2012-04-30 07:39:55

标签: java multithreading perl

我是Perl的新手,我正在编写一个需要使用线程的程序。我在Perl中找到了threads feature,但我发现我仍然有点困惑。正如本文标题中所述,Java可能是使用线程最常见的。我并不是说这是完美的,但我可以使用Thread课程完成工作。

在Java中,我有一个名为startThreads的方法,在该方法中我创建了线程然后启动它们。启动它们之后有一个while循环,检查踏板是否完成。如果所有线程都已正确退出,则while循环退出,但如果没有,则while循环正在观察哪些线程超时,然后安全地中断这些线程并将其关闭标志设置为true。

问题: 在Perl中我想使用我上面提到的相同算法,但当然Perl有所不同,我是Perl的新手。在其他线程运行时是否可以运行while循环?怎么做?

3 个答案:

答案 0 :(得分:2)

您可以使用while在Perl中实现threads->list()循环,但首先应该考虑不同的方法。

而不是等待线程,等待结果怎么样?

这里的基本思想是你有一些代码从队列中获取工作单元,并将工作单元的结果(对象或异常)放入输出队列。

启动几个等待输入队列中的工作单元的线程。当一个出现时,运行工作单元并将结果放入输出队列。

在主代码中,您只需要将所有N个工作单元放入输入队列(确保它足够大)。之后,您可以在输出队列中等待N个输出,而无需担心线程,连接和异常。

[编辑] 您的所有问题都应在http://perldoc.perl.org/perlthrtut.html

中得到解答

答案 1 :(得分:1)

在perl中使用线程时要小心。安全访问共享数据有很多细微差别。因为大多数Perl代码都没有进行线程处理,所以很少有模块是线程安全的。

答案 2 :(得分:0)

在阅读了Michael Slade提供的链接后,我发现Cyber​​-Guard Enterprise是正确的。通过分离线程,主要仍在执行工作。我还没有测试过,但看起来$ thr-> is_running()可以告诉我线程是否仍在运行。

这是从提供的网址中获取的,并显示了如何使用分离。 perldoc.perl.org/perlthrtut.html?

use threads;
my $thr = threads->create(\&sub1); # Spawn the thread
$thr->detach(); # Now we officially don't care any more
sleep(15); # Let thread run for awhile
sub sub1 {
$a = 0;
while (1) {
$a++;
print("\$a is $a\n");
sleep(1);
}
}