使用PHP pthreads运行600多个线程 - 开销

时间:2016-03-15 08:44:47

标签: php multithreading pthreads

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

因此,我有理由在由" pthread"创建/控制的单独线程中执行每个计算阶段。 每次计算大约需要0.10秒,但计算量可以让它们在序列化时花费很长时间。

我的问题:

  1. 创建新的"线程时是否有限制"用" pthreads"?
  2. 创建新主题时的开销是多少?我必须考虑这个以避免新的延迟。
  3. 我可以想象,几秒钟的负荷会非常高,但每次计算完成后它会突然结束。这不是问题。这是"我的"服务器和我不必关心其他用户[或它是共享服务器]。

1 个答案:

答案 0 :(得分:1)

在“等待”答案的同时:-)我开始重写课程。

我可以这样总结一下:

  1. 无法一次启动600个线程。我期待它,但我想知道限制在哪里。我的配置“允许”启动大约160个线程。
  2. 当启动超过这150个线程时,PHP脚本停止工作而不另行通知。
  3. 正如Franz Gleichmann指出,启动大量线程时整个过程花费的时间更长。我发现开始20个线程的性能最佳。
  4. 实现的性能提升在20%到50%之间 - 我很满意。
  5. 我不知道它是pthread库中的错误,但我无法访问任何类成员。我不得不在函数内部移动类成员。由于计算是在一个函数中的事实,它没有打扰我,我不进一步调查。