php并行处理_简单的PHP并行处理

本文介绍了如何使用PHP进行并行处理,通过创建f1.php、f2.php和control.php三个文件,实现在控制文件中异步执行两个脚本,以提高数据处理效率。示例代码展示了并行执行和收集结果的过程。
摘要由CSDN通过智能技术生成

现在的数据处理越来越复杂,串行的执行过程中如果遇到某项占用时间过长,会验证影响下面的执行,这时候并行处理就很有优势了。

做这个测试需要创建三个文件:f1.php,f2.php,control.php

f1.php内容和f2.php基本一样,职责是输出程序执行状态

control.php职责是异步的执行f1.php和f2.php,并把他们反馈的结果打印出来!

f1.php内容:

set_time_limit(0);

$secs = 60;

while ($secs > 0) {

echo 'f1.php::excute ',$secs,' seconds';

flush();

@ob_flush();

$secs--;

sleep(1);

}

?>f2.php内容略,把第五行f1.php改成f2.php就成了

control.php内容:<?php

function asyncRequest($host, $url, $port=80, $conn_timeout=30, $rw_timeout=86400) {

$errno = '';

$errstr = '';

$fp = fsockopen($host, $port, $errno, $errstr, $conn_timeout);

if (!$fp) {

echo "Server error:$errstr($errno)";

return false;

}

stream_set_timeout($fp, $rw_timeout);

stream_set_blocking($fp, false);

$rq = "GET $url HTTP/1.0\r\n";

$rq .= "Host: $host\r\n";

$rq .= "Connect: close\r\n\r\n";

fwrite($fp, $rq);

return $fp;

}

function asyncFetch(&$fp) {

if ($fp === false) return false;

if (feof($fp)) {

fclose($fp);

$fp = false;

return false;

}

return fread($fp, 10000);

}

$fp1 = asyncRequest('localhost', '/test/f1.php');

$fp2 = asyncRequest('localhost', '/test/f2.php');

while (true) {

sleep(1);

$r1 = asyncFetch($fp1);

$r2 = asyncFetch($fp2);

if ($r1 == false && $r2 == false) break;

echo $r1,'
',$r2,'
','------------------------
';

flush();

@ob_flush();

}

echo '

Job Complete

';

?>

访问http://localhost/test/control.php就会看到类似下边的输出结果

HTTP/1.1 200 OK Date: Mon, 24 Nov 2008 06:51:29 GMT Server: Apache/2.2.8 (Win32) PHP/5.2.5 X-Powered-By: PHP/5.2.5 Connection: close Content-Type: text/html

HTTP/1.1 200 OK Date: Mon, 24 Nov 2008 06:51:29 GMT Server: Apache/2.2.8 (Win32) PHP/5.2.5 X-Powered-By: PHP/5.2.5 Connection: close Content-Type: text/html

------------------------

f1.php::excute 60 seconds

f2.php::excute 60 seconds

------------------------

f1.php::excute 59 seconds

f2.php::excute 59 seconds

------------------------

f1.php::excute 58 seconds

f2.php::excute 58 seconds

------------------------

f1.php::excute 57 seconds

f2.php::excute 57 seconds

------------------------

这个技术在处理大批量数据的并行处理时能很大的提高效率

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值