Perlbrew安装没有线程支持。这只是一个遗留习惯还是带有线程支持的Perl安装会产生问题?
答案 0 :(得分:14)
使用线程支持编译Perl会因为所有锁定而增加很多开销,即使您不在程序中使用线程也是如此。我只是通过使用Perl编译的线程支持来测量一个简单基准测试的大约15%的开销。
答案 1 :(得分:4)
因为它不具备足够的稳健性和性能,所以
除此之外,您还必须考虑CPAN。用C编写的模块太多而不关心线程。
作为前Perl6 / Parrot的开发者,我以充满爱和尊重的态度说出这一点。 Perl5并没有从头开始设计并考虑到线程(至少当我参与社区时)。
此时,我认为没有足够的人关心改变它。未来将是Perl6,而Parrot很早就有线程。在其生命周期的这一点上破坏Perl 5的稳定性可能是值得怀疑的。
Perl在这方面是独一无二的,Linux在很长一段时间内都是一样的(因为有一个必须处理的大内核锁)。大多数项目都是这样开始的,但有些项目在解决之前会比其他项目更进一步。
答案 2 :(得分:2)
来自perl线程教程:
线程支持是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。