首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >线程vs Forking (带有我想做的事情的解释)

线程vs Forking (带有我想做的事情的解释)
EN

Stack Overflow用户
提问于 2013-04-28 08:08:06
回答 2查看 6.3K关注 0票数 6

所以,在发表这篇文章之前,我已经评论了大量的文章和论坛,但我一直在阅读相互矛盾的答案。首先,操作系统不是问题,我可以使用Windows或Unix,任何最适合我的问题。我有大量的数据需要用于只读目的(不确定这有什么关系,但以防万一,我必须处理的数据结构是由散列值也是数组的数组组成的数组)。我本质上是将一个“查询”与大量不同的“句子”进行比较,并计算它们的相对相似度。从这些数量(几百万)中,我想要取最高的x%,并用它们做一些事情。我需要将这个过程并行化。对于我来说,没有什么好的方法来减少空间--我需要比较所有的东西才能得到好的结果,而且使用某种线程/分支会花费太长的时间。再一次,我看到了许多相互矛盾的答案,不知道该怎么做。

任何帮助都将不胜感激。提前谢谢。

编辑:我认为内存使用量不会成为问题,但我不知道(8 GB RAM)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-04-28 11:22:12

如果没有更多关于你的问题的细节,就不会有太多的帮助。您希望并行化一个进程。Perl中的线程和fork各有优缺点。

Perl线程不同于其他线程的关键一点是,默认情况下不共享数据。这使得线程更容易和更安全地使用,你不必担心库或大多数代码的线程安全,只需担心线程部分。然而,这可能会拖累性能和耗费大量内存,因为Perl必须将解释器的副本和所有加载的模块放入每个线程中。

当涉及到forking时,我将只讨论Unix。Perl使用线程在Windows上模拟fork,它可以工作,但它可能很慢且有but。

派生优势

  • 非常快速地创建fork
  • 非常强大的

分支劣势

进程之间的

  • Communicating可能是缓慢和笨拙的

线程优势

  • 线程协调和数据交换相当容易
  • 线程非常易于使用

线程劣势

每个线程占用大量的memory

  • Threads,可能会很慢,start

  • Threads可能会有错误( perl)

越新越好(

如果文档是最新的,那么最后一个就有点小问题了。如果您要执行大量SQL操作,请不要使用线程。

一般而言,要获得Perl线程的良好性能,最好启动一个线程池并重用它们。可以更容易地创建、使用和丢弃Forks。

实际上,归根结底是什么适合你的思维方式和你的特定问题。

无论是哪种情况,您都可能需要一些工具来管理您的员工池。对于forking,你会想要使用Parallel::ForkManagerChild。Child特别好,因为它内置了进程间通信。

对于线程,你需要使用threads::sharedThread::Queue和read perlthrtut

在阅读有关Perl线程的文章时,请记住,当它们在2002年的5.8.0中引入时,它们有点废话,并且只能在5.10.1版本中使用。在那之后,他们变得相当坚定。关于它们的效率和健壮性的信息和观点往往很快就会过时。

票数 21
EN

Stack Overflow用户

发布于 2013-04-28 09:38:27

线程化可能更难得到正确的结果,但不会使用那么多的内存。

Forking可以更简单地实现,但会使用大量的内存。

如果您没有使用这两个版本的经验,我将从实现一个分支版本开始&从那里开始。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16258191

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档