用于元搜索引擎的 PHP 并行处理

标签 php parallel-processing meta-search

我开发了一个元搜索引擎,我想做的优化之一是并行处理搜索 API。想象一下,在 0.24 秒内从搜索引擎 A 检索结果,在 0.45 秒内从搜索引擎 B 检索结果,在 0.5 秒内从 SE C 检索结果。加上其他开销,元搜索引擎可以在大约 1.5 秒内返回聚合结果,这是可行的。现在我想做的是并行发送这些请求,而不是像现在这样串行发送,并将时间缩短到一秒以下。我调查了 exec、forking、threading 和所有这些,由于各种原因,都失败了。现在我只花了一两天时间,所以我可能错过了一些东西。理想情况下,我想在我的开发机器(本地主机)上的 WAMP 堆栈上实现它,然后查看关于在 Linux 网络服务器上实现的信息。任何帮助表示赞赏。

让我们举一个简单的例子:假设我们有两个文件要同时运行。文件 1:

<?php
// file1.php
echo 'File 1 - Test 1'.PHP_EOL;
$sleep = mt_rand(1, 5);
echo 'Start Time: '.date("g:i:sa").PHP_EOL;
echo 'Sleep Time: '.$sleep.' seconds.'.PHP_EOL;
sleep($sleep);
echo 'Finish Time: '.date("g:i:sa").PHP_EOL;
?>

现在,假设文件二是相同的……想法是如果并行运行,时间的命令行输出应该是相同的,例如:

File 1 - Test 1
Start Time: 9:30:43am
Sleep Time: 4 seconds.
Finish Time: 9:30:47am

但是无论我使用 exec、popen 还是其他什么,我都无法在 PHP 中使用它!

最佳答案

我会使用 socket_select() .这样做,只有连接时间会累积,因为您可以从并行的套接字中读取。这会给您带来性能提升。

关于用于元搜索引擎的 PHP 并行处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17682151/

相关文章:

php - 使用 bindParam 的 SELECT 查询不返回任何内容

c++ - 并行 for_each 比 std::for_each 慢两倍以上

ruby-on-rails - 测试元搜索/搜索

r - Windows 不支持“mc.cores”> 1

parallel-processing - 在 UMA 机器上使用 MPI 的优势

ruby-on-rails - 事件管理员自定义过滤器。按天过滤日期 |月 |日期属性的年份

ruby-on-rails - 如何在 Rails 3 中将作用域与 Ransack 一起使用?

php - history.pushState 导航 - 元标签怎么样 - 单独的模板?

PHP 设置时区而不更改日期?

php - 将数组中的数据合并到一个变量中