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