如果您想了解如何使用Perl解释器线程,有良好的文档perlthrtut(线程教程),并在threads附注手册页.写一些简单的脚本绝对够好.
但是,我发现在网络上的一些指导,为什么和怎样明智地使用Perl解释器线程.事实上,关于它们的讨论并不多,如果人们谈论它们,通常会阻止人们使用它们.
这些线程,可当perl -V:useithreads是useithreads='define';和释放use threads,也被称为的ithread,也许更恰当,以便他们有很大的不同,从由Linux或Windows操作系统或Java虚拟机中的任何内容所提供的线程默认情况下,而是一个共享大量数据被复制,而不仅仅是线程堆栈,因此显着增加了进程大小.(要查看效果,请在测试脚本中加载一些模块,然后在循环中创建线程,每次都按下按键,并观察任务管理器中的内存增加或top.)
[...]每次启动线程时,所有数据结构都将复制到新线程中.当我说全部,我的意思是全部.这包括包括stashes,全局变量,范围内的词汇.一切!
- 编程Perl ithreads之前需要了解的事情(Perlmonks 2003)
在研究Perl ithreads的主题时,你会看到人们不鼓励你使用它们("非常糟糕的主意","从根本上有缺陷",或"从不使用ithreads for any").
Perl线程教程强调"Perl线程是不同的",但它没有太多麻烦解释它们是如何不同以及这对用户意味着什么.
有关ithreads实际内容的有用但非常简短的解释来自WINDOWS PROCESS EMULATIONCoro标题下的联机帮助页.该模块的作者(Coro - perl中唯一真正的线程)也不鼓励使用Perl解释器线程.
在某处我读到,在启用线程的情况下编译perl会导致解释器显着变慢.
有从2003年Perlmonks页面(你需要的东西之前的Perl编程的ithread知道),其中笔者问:"现在你可能想知道为什么Perl中的ithread不使用fork()那不是已经取得了很多更有意义?" 这似乎是由forkspragma 的作者写的.不确定该页面上提供的信息在2012年仍适用于较新的Perls.
以下是Perl中线程使用的一些指导原则,我从读数中提炼出来(可能是错误的):
HTTP::Async,or AnyEvent::Socket或Coro::Socket.我正在研究一种数学模型,该模型使用XFOIL生成的数据,XFOIL是一种流行的航空航天工具,用于查找机翼上的升力和阻力系数.
我有一个Perl脚本,它使用不同的输入参数重复调用XFOIL,以生成我需要的数据.我需要XFOIL运行5,600次,每次运行大约100秒,结束6.5天完成.
我有一台四核机器,但我作为程序员的经验是有限的,我真的只知道如何使用基本的Perl.
我想一次运行四个XFOIL实例,所有实例都在自己的核心上.像这样的东西:
while ( 1 ) {
for ( i = 1..4 ) {
if ( ! exists XFOIL_instance(i) ) {
start_new_XFOIL_instance(i, input_parameter_list);
}
}
}
Run Code Online (Sandbox Code Playgroud)
因此,当我们可以使用新的输入参数列表启动新实例时,程序正在检查(或最好是休眠)直到XFOIL实例空闲.