如何使用PHP // Thread // Mutex // Cond

时间:2012-10-09 00:44:29

标签: php multithreading mutex

PHP显然现在支持Thread类。还有一个MutexCond类。然而,需要用好的选项编译它并添加PECL扩展来获得它。

有一个很好的教程从哪里开始?清楚显示每种类别/方法合理使用的东西。

我只是不知道如何处理这些类。我需要一些具体的例子来做一些非常简单的事情,展示尽可能多的方法。

谢谢。

2 个答案:

答案 0 :(得分:14)

它已经发布,可以在pecl上获得,windows下载在github页面上... git(source)如果可以的话,更新的代码......

http://pthreads.org包含更多信息,并检查示例文件夹......

如果您对自己需要做的更具体,我可以提供准确的答案,请随时直接与我联系......

对于缺乏文档感到抱歉,我正在积极地开发pthreads,我在工作的时间很短的时间 - 它是在我下班休假期间写的,我现在又回来工作了 - 文档将会更新到我一找到时间就可以。

线程通常是一件复杂的事情,但它不一定......看到一个小于100行的线程池? https://github.com/krakjoe/pthreads/blob/master/examples/Pooling.php ......有一个!!

你不需要知道在PHP中运行线程的条件或互斥,pthreads包含简单易用的一切......

跳上船,毫无疑问,我会完善它 ......

答案 1 :(得分:1)

在任何语言中,线程都不容易。它需要不同的思路(非线性)。由于您提到的内容在任何已发布的PHP版本中都不可用,我建议您使用pctnl和shmop功能。特别是pcntl_fork。两者都有一段时间,并得到支持。它是多处理而不是线程,但可以完成您正在寻找的。但是线程更有效。

通常,您将使用分叉进行父进程检查工作,将其委派给分叉进程,然后在子进程执行工作时检查更多工作。父进程可以检查子进程的状态。例如,您可以确保只分叉一定数量的子进程并等待一个进程完成,然后再分叉。

我已经分配了500个进程,此时CPU负载变高了。如果负载过高,父进程将检查系统负载而不再进行分叉。

如果你真的需要,你可以使用共享内存(shmop函数)和分叉来获得线程化的大部分功能。