加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

perl – 线程与分叉(解释我想做什么)

发布时间:2020-12-15 23:35:11 所属栏目:大数据 来源:网络整理
导读:所以,在发布之前我已经回顾了大量的文章和论坛,但我一直在阅读相互矛盾的答案.首先,操作系统不是问题,我可以使用 Windows或Unix,无论哪种方式最适合我的问题.我有大量数据需要用于只读目的(不知道为什么这会很重要,但是,如果确实如此,我将要经历的数据结构是
所以,在发布之前我已经回顾了大量的文章和论坛,但我一直在阅读相互矛盾的答案.首先,操作系统不是问题,我可以使用 Windows或Unix,无论哪种方式最适合我的问题.我有大量数据需要用于只读目的(不知道为什么这会很重要,但是,如果确实如此,我将要经历的数据结构是一个数组的数组哈希数组,其值也是数组).我基本上将“查询”与大量不同的“句子”进行比较并计算它们的相对相似性.从这些数量(几百万),我想采取顶部x%,并与他们做一些事情.我需要并行化这个过程.对我来说,没有什么好方法可以减少空间 – 我需要比较一切以获得良好的结果,并且只需要花费太长时间进行某种线程/分叉.我再次看到了许多相互矛盾的答案,并且不知道该做什么.

任何帮助,将不胜感激.提前致谢.

编辑:我不认为内存使用量将是一个问题,但我不知道(8 GB RAM)

解决方法

没有关于你的问题的更多细节,可以给出很多帮助.您想要并行化流程. Perl中的线程和叉子有优点和缺点.

使Perl线程与其他线程不同的一个关键因素是默认情况下不共享数据.这使得线程更容易和更安全,您不必担心库或大多数代码的线程安全性,只需要担心线程位.然而,它可能是性能拖累和内存饥饿,因为Perl必须将解释器的副本和所有加载的模块放入每个线程中.

说到分叉,我只会谈论Unix. Perl使用线程在Windows上模拟fork,它可以工作,但它可能很慢而且有问题.

分叉优势

>创建一个分叉非常快
>非常强大

分叉缺点

>流程之间的沟通可能很慢而且很尴尬

线程优势

>线程协调和数据交换相当容易
>线程相当容易使用

线程缺点

>每个线程占用大量内存
>线程启动缓慢
>线程可能有错误(你的perl越近越好)
> Database connections are not shared across threads

如果文档是最新的,那最后一个有点麻烦.如果你要做很多SQL,不要使用线程.

通常,为了从Perl线程中获得良好的性能,最好启动一个线程池并重用它们.可以更容易地创建,使用和丢弃叉子.

真正归结为什么适合您的思维方式和您的特定问题.

无论哪种情况,您可能都想要管理您的工作人员.为了分叉,你将要使用Parallel::ForkManager或Child.孩子特别好,因为它内置了进程间通信.

对于线程,您将要使用threads::shared,Thread::Queue和perlthrtut.

在阅读有关Perl线程的文章时,请记住,当它们在2002年引入5.8.0时它们有点废话,并且只能通过5.10.1进行维护.在那之后他们已经相当坚定了.有关其效率和稳健性的信息和意见往往会过时.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读