快速业务通道

用 PHP V5 开发多任务应用程序

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-25
程”,并且甘于使用现有的计算模型。

  可是,有时我们可以做得更好。假定 PHP 页面需要计算两只股票价格,可能还需要将两者相比较,并且底层主机刚好是多处理器。在这种情况下,通过将两个截然不同并且十分耗时的计算分配给不同处理器,可能会提高几乎两倍的性能。

  在所有 PHP 计算领域中,此类实例很少见。但是,由于我发现到处都没有对它的精确记录,因此需要在这里包括用于此类加速的模型。

  清单 5. 延迟服务器实现

<?php
echo "Program starts at ". date(''h:i:s'') . ".\n";

$timeout=10;
$streams=array();
$handles=array();

/* First launch a program with a delay of three seconds, then
one which returns after only one second. */
$delay=3;
for ($id=0; $id <= 1; $id++) {
 $error_log="/tmp/error" . $id . ".txt"
 $descriptorspec=array(
  0 => array("pipe", "r"),
  1 => array("pipe", "w"),
  2 => array("file", $error_log, "w")
 );
 $cmd=''sleep '' . $delay . ''; echo "Finished with delay of '' .
 $delay . ''".'';
 $handles[$id]=proc_open($cmd, $descriptorspec, $pipes);
 $streams[$id]=$pipes[1];
 $all_pipes[$id]=$pipes;
 $delay -= 2;
}

while (count($streams)) {
 $read=$streams;
 stream_select($read, $w=null, $e=null, $timeout);
 foreach ($read as $r) {
  $id=array_search($r, $strea**ms);
  echo stream_get_contents($all_pipes[$id][1]);
  if (feof($r)) {
   fclose($all_pipes[$id][0]);
   fclose($all_pipes[$id][1]);
   $return_value=proc_close($handles[$id]);
   unset($streams[$id]);
  }
 }
}
?>

  此程序将生成如下输出:

Program starts at 10:28:41.
Finished with delay of 1.
Finished with delay of 3.

  这里的关键在于 PHP 启动了两个独立子进程,取回待完成的第一个进程的输出,然后取回第二个进程的输出,即使后者启动得较早。如果主机是多处理器计算机,并且操作系统已正确配置,则操作系统本身负责将各个子程序分配给不同的处理器。这是在多处理器主机中良好应用 PHP 的一种方法。

  PHP 支持多任务。PHP 不按照诸如 Java 编程语言或 C++ 等其他语言所采用的方法支持线程,但是以上示例表明 PHP 具有更多的超乎想象的加速潜力。

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号