利用PHP V5开发多任务应用程序(6)_PHP教程

编辑Tag赚U币
教程Tag:暂无Tag,欢迎添加,赚取U币!

推荐:详细解析 PHP 向 MySQL 发送数据过程
下面的一段代码是一个很简单的 HTML 表单: <html> <body> <formaction=submitform.php3method=GET> 姓:<inputtype=textname=fir

大多数 PHP 页面已经足够快 —— 更好的性能会是一种优势,但是还不值得对新代码进行投入。

在 Web 页面中使用 PHP 可以放弃部分无关紧要的性能提升 —— 当惟一的价值标准是交付整个 Web 页面需要的时间时,那么重新安排计算以更快地获得中间结果并不重要。

PHP 不能控制本地瓶颈 —— 用户可能会为花 8 秒的时间提取帐户记录的详细信息而抱怨,但是那很可能是数据库处理或某种其他 PHP 外部资源的约束。即使将 PHP 处理降至零,单是查找就仍需要花费超过 7 秒的时间。

甚至很少有约束是并行的 —— 假定某特定页面将为具体列出的普通股计算建议交易价格,并且计算十分复杂,需要花费一段时间。计算在本质上可能是顺序执行的。没有一种明显的方法可以将其划分为 “团队协作”。

很少有 PHP 程序员能够认识到 PHP 实现并发的潜力。在具有使用并行实现性能需求的少数人当中,我遇到的大多数人全都说 PHP “不支持线程”,并且甘于使用现有的计算模型。

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

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

清单 5. 延迟服务器实现

<?php
echo "Program starts at ". date('h:i:s') . ".
";
$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 具有更多的超乎想象的加速潜力。

分享:PHP实现静态发布的方法浅谈
如今很多网站都是静态发布的,PHP当然也可以方便的实现静态发布喽,具体的实现方法很多,下面我就说说我会的两种方法。 方法一:ob_get_contents() 这是一种很方便的方法,也是很常用的方法

共6页上一页123456下一页
来源:模板无忧//所属分类:PHP教程/更新时间:2008-08-22
相关PHP教程