Perl解释器线程有哪些替代方案?

时间:2015-05-05 14:35:53

标签: multithreading perl

perldoc threads说:

  

官方不鼓励在perl中使用基于解释器的线程。

还有其他基于Perl的线程吗?或者我们不应该在Perl中使用线程吗?

3 个答案:

答案 0 :(得分:11)

取决于你想要完成的事情。我仍然广泛使用线程,并且它们没有大问题。

他们面临的最大问题是它们不是轻量级的,如果您使用其他语言编写线程,您可能会期望它们。

他们反过来了 - 产生一个线程就像重新开始你的代码,但是有一些有用的IPC挂钩。这意味着你真的不想做一个程序的每线程任务模型,就像你可能想到的那样。

相反,Thread::Queue工作线程样式模型可以为您提供更好的服务。这是一个例子: Perl daemonize with child daemons

但是,可能想要考虑使用fork作为替代方案。 fork - 因为它在Unix上的实现 - 是一个非常有效的系统调用,并且可以非常有效地产生新进程。 缺点是 - 它对IPC来说不太友好。

Parallel::ForkManager是我喜欢为多处理分叉的一个模块。

但在任何一种情况下你都应该注意 - 多处理并不是一个神奇的子弹。如果你有正确的问题需要解决,它可以让你占用更多的CPU 。它不会让你的磁盘变得更快:)

答案 1 :(得分:7)

那个警告是poppycock。它应该删除。 Perl的开发人员解释说,这意味着"如果你想要一个轻量级的多任务处理系统,那么正式建议不要在perl中使用基于解释器的线程

由于创建新线程可能很昂贵,因此只需使用涉及可重用工作线程的模型。

答案 2 :(得分:1)

只要我知道,就没有可靠的线程实现。您应该坚持使用一些基于事件的模块,例如CoroAnyEventIO::Async等。