【问题标题】:threads vs. pthread in perlperl 中的线程与 pthread
【发布时间】:2012-11-15 06:09:25
【问题描述】:

我想知道当我在 freebsd 中从端口源编译 perl 5.16(和其他版本)时,选项 'THREADS' 和 'PTHREAD' 有什么不同?

PTHREAD 是 posix 线程吗? (因为-pthread)如果是这样,它是否更喜欢“线程”? (因为它似乎是预先选择的)即使在freebsd上?另一方面,什么是“线程”(内核线程?)?有什么好处和坏处?

我可以在一个安装中同时使用两者吗?有道理吗?

据我所知,与 perl 结合使用的东西并不多。

非常感谢 吉米

【问题讨论】:

  • hum... Perl 只有一个线程模型 (-Dusethreads)
  • hmm :) 好的,使用 'THREADS' 编译它会将配置参数从 -Dusethreads=n 更改为 -Dusethreads=y。 “PTHREADS”将“-pthread”添加到 ldflags。所以,我想这不仅仅是在开玩笑。这有所不同,但我想知道什么?! ://
  • Perl 曾经有不同的线程模型。它非常破碎。您可能正在尝试访问它。
  • 这个“它”是什么?你在用什么?在 Perl 发行版的任何地方都找不到“THREADS”和“PTHREAD”。如果您需要线程,请将-Dusethreads 传递给配置。如果你不这样做,你就不会。
  • @ikegami, pthreads 提到了here in perlthrtut。 @JimmyKoerting:但它只是将 Perl 中的线程模型与 pthreads 的 POSIX 模型进行比较。 Here

标签: multithreading perl pthreads freebsd


【解决方案1】:

当然,正如其他人所描述的那样,使用线程。

与 pthread 的链接意味着您的 perl 是使用 -pthread 标志构建的。这有一个微妙但重要的影响。这意味着当 perl 启动时,为线程维护状态的 libc 数据被初始化。这意味着如果您的 perl 在线程库上调用 dlopen(),它将正常工作,而不是挂起。

PS。我实际上是编写 PTHREAD 选项并将其提交到端口的人。我实际上发现了一些 perl 模块,它们 dlopen()'d 一些线程库并导致 perl 挂起。我花了一段时间才弄清楚为什么。相信我,你想要 PTHREAD 选项。我实际上正在考虑删除将其关闭的选项。有关更多信息,请参阅 FreeBSD PR 163512 和 163878。我们可能应该将此选项推送到上游,以便 perl 在 FreeBSD 上默认使用此选项。任何可能调用 dlopen() 的东西都应该使用 -pthread 构建。

【讨论】:

  • 我就是爱你!是的,关于您提到和引用的内容,将其设为默认值听起来是个好主意。再次感谢!
  • 感谢您的解释。我建议始终将 perl 与 pthread 链接:rt.perl.org/Public/Bug/Display.html?id=122906
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-08-24
  • 1970-01-01
  • 1970-01-01
  • 2019-07-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多