日韩天天综合网_野战两个奶头被亲到高潮_亚洲日韩欧美精品综合_av女人天堂污污污_视频一区**字幕无弹窗_国产亚洲欧美小视频_国内性爱精品在线免费视频_国产一级电影在线播放_日韩欧美内地福利_亚洲一二三不卡片区

利用PHP V5開發(fā)多任務(wù)應(yīng)用程序(6)_PHP教程

編輯Tag賺U幣
教程Tag:暫無Tag,歡迎添加,賺取U幣!

推薦:詳細(xì)解析 PHP 向 MySQL 發(fā)送數(shù)據(jù)過程
下面的一段代碼是一個(gè)很簡(jiǎn)單的 HTML 表單: <html> <body> <formaction=submitform.php3method=GET> 姓:<inputtype=textname=fir

大多數(shù) PHP 頁(yè)面已經(jīng)足夠快 —— 更好的性能會(huì)是一種優(yōu)勢(shì),但是還不值得對(duì)新代碼進(jìn)行投入。

在 Web 頁(yè)面中使用 PHP 可以放棄部分無關(guān)緊要的性能提升 —— 當(dāng)惟一的價(jià)值標(biāo)準(zhǔn)是交付整個(gè) Web 頁(yè)面需要的時(shí)間時(shí),那么重新安排計(jì)算以更快地獲得中間結(jié)果并不重要。

PHP 不能控制本地瓶頸 —— 用戶可能會(huì)為花 8 秒的時(shí)間提取帳戶記錄的詳細(xì)信息而抱怨,但是那很可能是數(shù)據(jù)庫(kù)處理或某種其他 PHP 外部資源的約束。即使將 PHP 處理降至零,單是查找就仍需要花費(fèi)超過 7 秒的時(shí)間。

甚至很少有約束是并行的 —— 假定某特定頁(yè)面將為具體列出的普通股計(jì)算建議交易價(jià)格,并且計(jì)算十分復(fù)雜,需要花費(fèi)一段時(shí)間。計(jì)算在本質(zhì)上可能是順序執(zhí)行的。沒有一種明顯的方法可以將其劃分為 “團(tuán)隊(duì)協(xié)作”。

很少有 PHP 程序員能夠認(rèn)識(shí)到 PHP 實(shí)現(xiàn)并發(fā)的潛力。在具有使用并行實(shí)現(xiàn)性能需求的少數(shù)人當(dāng)中,我遇到的大多數(shù)人全都說 PHP “不支持線程”,并且甘于使用現(xiàn)有的計(jì)算模型。

可是,有時(shí)我們可以做得更好。假定 PHP 頁(yè)面需要計(jì)算兩只股票價(jià)格,可能還需要將兩者相比較,并且底層主機(jī)剛好是多處理器。在這種情況下,通過將兩個(gè)截然不同并且十分耗時(shí)的計(jì)算分配給不同處理器,可能會(huì)提高幾乎兩倍的性能。

在所有 PHP 計(jì)算領(lǐng)域中,此類實(shí)例很少見。但是,由于我發(fā)現(xiàn)到處都沒有對(duì)它的精確記錄,因此需要在這里包括用于此類加速的模型。

清單 5. 延遲服務(wù)器實(shí)現(xiàn)

<?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]);
}
  }
}
?>


此程序?qū)⑸扇缦螺敵觯?/p>

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

這里的關(guān)鍵在于 PHP 啟動(dòng)了兩個(gè)獨(dú)立子進(jìn)程,取回待完成的第一個(gè)進(jìn)程的輸出,然后取回第二個(gè)進(jìn)程的輸出,即使后者啟動(dòng)得較早。如果主機(jī)是多處理器計(jì)算機(jī),并且操作系統(tǒng)已正確配置,則操作系統(tǒng)本身負(fù)責(zé)將各個(gè)子程序分配給不同的處理器。這是在多處理器主機(jī)中良好應(yīng)用 PHP 的一種方法。

PHP 支持多任務(wù)。PHP 不按照諸如 Java 編程語言或 C 等其他語言所采用的方法支持線程,但是以上示例表明 PHP 具有更多的超乎想象的加速潛力。

分享:PHP實(shí)現(xiàn)靜態(tài)發(fā)布的方法淺談
如今很多網(wǎng)站都是靜態(tài)發(fā)布的,PHP當(dāng)然也可以方便的實(shí)現(xiàn)靜態(tài)發(fā)布嘍,具體的實(shí)現(xiàn)方法很多,下面我就說說我會(huì)的兩種方法。 方法一:ob_get_contents() 這是一種很方便的方法,也是很常用的方法

共6頁(yè)上一頁(yè)123456下一頁(yè)
來源:模板無憂//所屬分類:PHP教程/更新時(shí)間:2008-08-22
相關(guān)PHP教程