gpt4 book ai didi

perl - 线程与 fork (解释我想要做什么)

转载 作者:行者123 更新时间:2023-12-02 11:25:30 27 4
gpt4 key购买 nike

因此,在发布此之前,我已经查看了大量文章和论坛,但我一直在阅读相互矛盾的答案。首先,操作系统不是问题,我可以使用 Windows 或 Unix,只要最适合我的问题。我有大量数据需要用于只读目的(不知道为什么这很重要,但是,如果确实如此,我将不得不经历的数据结构是一个数组数组其值也是数组的哈希数组)。我本质上是将“查询”与大量不同的“句子”进行比较并计算它们的相对相似性。从这些数量(几百万)中,我想拿走前 x% 并用它们做点什么。我需要并行化这个过程。我没有什么好办法来减少空间——我需要比较所有东西才能得到好的结果,而且使用某种线程/ fork 会花费太长时间。同样,我看到了许多相互矛盾的答案,不知道该做什么。

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

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

最佳答案

如果没有更多关于您的问题的详细信息,则无法提供太多帮助。你想并行化一个过程。 Perl 中的线程和分支各有优缺点。

使 Perl 线程与其他线程不同的关键之一是默认情况下不共享数据。这使线程更容易和更安全地使用,您不必担心库或大多数代码的线程安全,只需担心线程位。然而,由于 Perl 必须将解释器的副本和所有加载的模块放入每个线程中,这可能会导致性能下降和内存消耗。

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

fork 优势

  • 创建 fork 非常快
  • 非常健壮

  • fork 缺点
  • 进程之间的通信可能会很慢而且很尴尬

  • 线程优势
  • 线程协调和数据交换相当容易
  • 线程相当容易使用

  • 线程缺点
  • 每个线程占用大量内存
  • 线程启动可能很慢
  • 线程可能有问题(perl 越新越好)
  • Database connections are not shared across threads

  • 如果文档是最新的,那么最后一个有点笨拙。如果您要执行大量 SQL,请不要使用线程。

    一般来说,要从 Perl 线程中获得良好的性能,最好启动一个线程池并重用它们。可以更轻松地创建、使用和丢弃 fork 。

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

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

    对于您要使用的线程 threads::shared , Thread::Queue并阅读 perlthrtut .

    在阅读有关 Perl 线程的文章时,请记住它们在 2002 年在 5.8.0 中引入时有点垃圾,并且只能在 5.10.1 中使用。在那之后,他们已经相当坚定了。关于其效率和稳健性的信息和意见往往会很快过时。

    关于perl - 线程与 fork (解释我想要做什么),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16258191/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com