为什么Perl通常没有线程支持而安装?

时间:2014-05-15 06:06:42

标签: perl perlbrew

每个默认的Perl

Perlbrew安装没有线程支持。这只是一个遗留习惯还是带有线程支持的Perl安装会产生问题?

5 个答案:

答案 0 :(得分:14)

使用线程支持编译Perl会因为所有锁定而增加很多开销,即使您不在程序中使用线程也是如此。我只是通过使用Perl编译的线程支持来测量一个简单基准测试的大约15%的开销。

答案 1 :(得分:4)

因为它不具备足够的稳健性和性能,所以

除此之外,您还必须考虑CPAN。用C编写的模块太多而不关心线程。

作为前Perl6 / Parrot的开发者,我以充满爱和尊重的态度说出这一点。 Perl5并没有从头开始设计并考虑到线程(至少当我参与社区时)。

此时,我认为没有足够的人关心改变它。未来将是Perl6,而Parrot很早就有线程。在其生命周期的这一点上破坏Perl 5的稳定性可能是值得怀疑的。

Perl在这方面是独一无二的,Linux在很长一段时间内都是一样的(因为有一个必须处理的大内核锁)。大多数项目都是这样开始的,但有些项目在解决之前会比其他项目更进一步。

答案 2 :(得分:2)

来自perl线程教程:

  

Basic Thread Support

     

线程支持是Perl编译时选项。这是一些东西   在您的站点上构建Perl时打开或关闭,而不是在何时   你的程序是编译的。如果你的Perl没有用线程编译   启用支持,然后任何使用线程的尝试都将失败。

     

您的程序可以使用Config模块检查线程是否正常   启用。

答案 3 :(得分:2)

正如@ steffen-ultisch所说,这是一个性能问题。

但是,如果有人愿意,可以使用和不使用线程轻松安装Perl,因此您可以使用更适合给定脚本的版本。

perlbrew安装,比如说Perl 5.22.1,是:

perlbrew install-multiple 5.22.1 --both=thread

答案 4 :(得分:1)

Perl线程在通常意义上不是线程 - 它实际上为每个线程运行一个单独的解释器,因此没有共享状态。共享内存模型是使用线程与分叉进程的主要原因,因此很少使用Perl线程。

此外,如果同时使用多个线程不是线程安全的模块,很容易出现崩溃或其他意外行为。

有关详情,请参阅http://perldoc.perl.org/threads.html