【发布时间】:2010-09-07 23:18:56
【问题描述】:
我有一个非常好的 perl 子例程,它是作为 perl 模块的一部分编写的。在不涉及太多细节的情况下,它将一个字符串和一个简短列表作为参数(通常取自终端)并输出一个值(现在,总是一个浮点数,但可能并非总是如此。)
现在,我的参数的列表部分有两个值,比如 (val1,val2)。我使用 for 循环将子例程的输出保存为 val1 和 val2 的数百个不同值。每次迭代几乎需要一秒钟才能完成 - 因此完成整个过程需要数小时。
我最近读到了一个神秘的(对我而言)名为“线程”的计算工具,它显然可以用极快的执行时间代替 for 循环。我一直无法理解这些是什么以及做什么,但我想它们与并行计算有关(我希望我的模块尽可能针对并行处理器进行优化。)
如果我将所有想要传递给 val1 的值保存为一个列表,比如 @val1 和 val2 相同,我如何使用这些“线程”为 val1 和val2? 此外,了解如何将此过程推广到也采用 val3、val4 等的子例程会很有帮助。
【问题讨论】:
-
是的,我看过这个,但恐怕我还是一头雾水。我的 $thr = threads->create(sub { ... }, ...);似乎是我正在寻找的,但我不明白如何使用它。我已经看过教程等等,但我仍然对如何实现线程感到困惑。例如:我的 $thr = threads->create(sub { ... }, ...);制作一个与普通子程序完全相同但并行执行的子程序?这是我的假设,但我没有太多事情要做。
-
不,它启动一个运行该子程序的线程,并返回一个线程对象,就像 perldoc 所说的那样。
标签: multithreading perl loops subroutine pdl