运行 600 多个线程和 PHP 个 pthreads - 开销如何

Running 600+ threads with PHP pthreads - what about the overhead

我的服务器有 2 个物理 CPU,总共有 24 个内核和 10 GB RAM。 PHP 程序正在计算统计数据,我可以 运行 每个部分完全独立于其他部分。一旦所有计算完成,我只需要 "merge" 它们。

因此我有了 "pthread" 在单独的线程 created/controlled 中执行每个计算阶段的想法。 每次计算大约需要 0.10 秒,但计算量使其在序列化时需要那么长时间。

我的问题:

  1. 用 "pthreads" 创建新的 "thread" 有限制吗?
  2. 创建新线程时的开销是多少?我必须考虑这一点以避免新的延迟。

我可以想象几秒钟内负载会非常高,但一旦每次计算完成,它就会突然结束。这不是问题。它是 "my" 服务器,我不必关心其他用户 [或者当它是共享服务器时]。

虽然 "waiting" 的答案:-) 我开始重写 class.

我可以这样总结:

  1. 无法同时启动 600 个线程。我预料到了,但我想知道极限在哪里。我的配置 "allowed" 大约有 160 个线程要启动。
  2. 当启动超过这 150 个线程时,PHP 脚本停止工作,恕不另行通知。
  3. 正如 Franz Gleichmann 指出的那样,启动大量线程时整个过程花费的时间更长。我发现启动 20 个线程具有最佳性能。
  4. 实现的性能提升在 20% 到 50% 之间 - 我很满意。
  5. 我不知道这是否是 pthread 库中的错误,但我无法访问任何 class 成员。我不得不将 class 成员移动到函数内部。由于计算是在一个函数中进行的,所以它并没有打扰我,我也没有进一步研究它。