在 PHP 中实现多线程


Achieving multithreading in PHP

我正在用php编写一种测试系统,可以测试我的数据库记录。我为每个测试用例都分开了 php 文件。一个(主(文件以 URL 字符串的形式提供该测试的测试编号和输入参数。该文件确定测试编号,并根据测试编号调用相应的测试用例。现在我有一堆要传递的 URL 字符串,我希望将它们传递给那个(主(文件,并且每个测试用例在收到其参数后开始独立工作。

PHP 是一个单线程实体,目前不存在多线程。但是,当人们通常问我多线程时,您可以做一些事情来实现类似(但不相同(的用例结果。同样,PHP 中没有多线程,但以下一些内容可以帮助您进一步创建具有可能符合您要求的特征的东西。

  • libevent:您可以使用它为 PHP 创建一个事件循环,这将使阻塞问题更少。 请参阅 http://www.php.net/manual/en/ref.libevent.php
  • curl_multi:另一个有用的库,可以触发获取/发布到其他服务。
  • 过程控制
  • :我自己没有使用过这个,但如果过程控制是你问题的一个方面,则可能很有价值。 http://uk.php.net/pcntl
  • Gearman:现在这个我已经用过了,它非常好。它允许您创建工作线程并将流程分拆到队列中。您可能还想看看 rabbit-php 或 ZeroMQ。

PHP 不是多线程的,它是单线程的。您不能在 PHP 中启动新线程。最好的选择是file_get_contents(或cURL(到另一个PHP脚本来"模仿"线程。真正的多线程在 PHP 中不可用。

你也可以看看约翰在 http://phplens.com/phpeverywhere/?q=node/view/254 的帖子。

您可以做的是使用 cURL 将请求发送回服务器。将处理请求并返回结果。

一个例子是:

$c = curl_init("http://servername/".$script_name.$params);
curl_setopt($c, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($c);
curl_close($c);

虽然这不被视为多线程,但它可用于实现您的目标。