所以,在发布之前我已经回顾了大量的文章和论坛,但我一直在阅读相互矛盾的答案.首先,操作系统不是问题,我可以使用Windows或Unix,无论哪种方式最适合我的问题.我有一吨的数据,我需要使用只读目的(不知道为什么会无所谓,但是,如果是的话,那我将要经过的数据结构是数组的数组哈希数组,其值也是数组).我基本上将"查询"与大量不同的"句子"进行比较并计算它们的相对相似性.从这些数量(几百万),我想采取顶部x%,并与他们做一些事情.我需要并行化这个过程.只是有没有什么好办法让我减少了空间 - 我需要高于一切,以获得良好的结果进行比较,这将花费的时间太长了某种线程/分叉的.我再次看到了许多相互矛盾的答案,并且不知道该做什么.
任何帮助,将不胜感激.提前致谢.
编辑:我不认为内存使用量将是一个问题,但我不知道(8 GB RAM)
Sch*_*ern 18
没有关于你的问题的更多细节,可以给出很多帮助.您想要并行化流程.Perl中的线程和叉子有优点和缺点.
使Perl线程与其他线程不同的一个关键因素是默认情况下不共享数据.这使得线程更容易和更安全,您不必担心库或大多数代码的线程安全性,只需要担心线程位.然而,它可能是性能拖累和内存饥饿,因为Perl必须将解释器的副本和所有加载的模块放入每个线程中.
说到分叉,我只会谈论Unix.Perl使用线程在Windows上模拟fork,它可以工作,但它可能很慢而且有问题.
分叉优势
分叉缺点
线程优势
线程缺点
如果文档是最新的,那最后一个有点麻烦.如果你要做很多SQL,不要使用线程.
通常,为了从Perl线程中获得良好的性能,最好启动一个线程池并重用它们.可以更容易地创建,使用和丢弃叉子.
真正归结为什么适合您的思维方式和您的特定问题.
无论哪种情况,您可能都想要管理您的工作人员.为了分叉,你将要使用Parallel :: ForkManager或Child.孩子特别好,因为它建立了进程间通信.
对于线程,您将要使用threads :: shared,Thread :: Queue和read perlthrtut.
在阅读有关Perl线程的文章时,请记住,当它们在2002年引入5.8.0时它们有点废话,并且只能通过5.10.1进行维护.在那之后他们已经相当坚定了.有关其效率和稳健性的信息和意见往往会过时.