相关疑难解决方法(0)

Perl中的ithreads(解释器线程)的用例以及使用或不使用它们的基本原理?

如果您想了解如何使用Perl解释器线程,有良好的文档perlthrtut(线程教程),并threads附注手册页.写一些简单的脚本绝对够好.

但是,我发现在网络上的一些指导,为什么怎样明智地使用Perl解释器线程.事实上,关于它们的讨论并不多,如果人们谈论它们,通常会阻止人们使用它们.

这些线程,可当perl -V:useithreadsuseithreads='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中线程使用的一些指导原则,我从读数中提炼出来(可能是错误的):

parallel-processing perl multithreading

30
推荐指数
2
解决办法
4085
查看次数

如何让我的Perl脚本为子进程使用多个内核?

我正在研究一种数学模型,该模型使用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实例空闲.

perl multicore

15
推荐指数
2
解决办法
2万
查看次数