运行 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 秒,但计算量使其在序列化时需要那么长时间。
我的问题:
- 用 "pthreads" 创建新的 "thread" 有限制吗?
- 创建新线程时的开销是多少?我必须考虑这一点以避免新的延迟。
我可以想象几秒钟内负载会非常高,但一旦每次计算完成,它就会突然结束。这不是问题。它是 "my" 服务器,我不必关心其他用户 [或者当它是共享服务器时]。
虽然 "waiting" 的答案:-) 我开始重写 class.
我可以这样总结:
- 无法同时启动 600 个线程。我预料到了,但我想知道极限在哪里。我的配置 "allowed" 大约有 160 个线程要启动。
- 当启动超过这 150 个线程时,PHP 脚本停止工作,恕不另行通知。
- 正如
Franz Gleichmann
指出的那样,启动大量线程时整个过程花费的时间更长。我发现启动 20 个线程具有最佳性能。
- 实现的性能提升在 20% 到 50% 之间 - 我很满意。
- 我不知道这是否是
pthread
库中的错误,但我无法访问任何 class 成员。我不得不将 class 成员移动到函数内部。由于计算是在一个函数中进行的,所以它并没有打扰我,我也没有进一步研究它。
我的服务器有 2 个物理 CPU,总共有 24 个内核和 10 GB RAM。 PHP 程序正在计算统计数据,我可以 运行 每个部分完全独立于其他部分。一旦所有计算完成,我只需要 "merge" 它们。
因此我有了 "pthread" 在单独的线程 created/controlled 中执行每个计算阶段的想法。 每次计算大约需要 0.10 秒,但计算量使其在序列化时需要那么长时间。
我的问题:
- 用 "pthreads" 创建新的 "thread" 有限制吗?
- 创建新线程时的开销是多少?我必须考虑这一点以避免新的延迟。
我可以想象几秒钟内负载会非常高,但一旦每次计算完成,它就会突然结束。这不是问题。它是 "my" 服务器,我不必关心其他用户 [或者当它是共享服务器时]。
虽然 "waiting" 的答案:-) 我开始重写 class.
我可以这样总结:
- 无法同时启动 600 个线程。我预料到了,但我想知道极限在哪里。我的配置 "allowed" 大约有 160 个线程要启动。
- 当启动超过这 150 个线程时,PHP 脚本停止工作,恕不另行通知。
- 正如
Franz Gleichmann
指出的那样,启动大量线程时整个过程花费的时间更长。我发现启动 20 个线程具有最佳性能。 - 实现的性能提升在 20% 到 50% 之间 - 我很满意。
- 我不知道这是否是
pthread
库中的错误,但我无法访问任何 class 成员。我不得不将 class 成员移动到函数内部。由于计算是在一个函数中进行的,所以它并没有打扰我,我也没有进一步研究它。