利用PHP V5開發(fā)多任務(wù)應(yīng)用程序(6)_PHP教程
推薦:詳細(xì)解析 PHP 向 MySQL 發(fā)送數(shù)據(jù)過程下面的一段代碼是一個很簡單的 HTML 表單: <html> <body> <formaction=submitform.php3method=GET> 姓:<inputtype=textname=fir
大多數(shù) PHP 頁面已經(jīng)足夠快 —— 更好的性能會是一種優(yōu)勢,但是還不值得對新代碼進(jìn)行投入。
在 Web 頁面中使用 PHP 可以放棄部分無關(guān)緊要的性能提升 —— 當(dāng)惟一的價值標(biāo)準(zhǔn)是交付整個 Web 頁面需要的時間時,那么重新安排計算以更快地獲得中間結(jié)果并不重要。
PHP 不能控制本地瓶頸 —— 用戶可能會為花 8 秒的時間提取帳戶記錄的詳細(xì)信息而抱怨,但是那很可能是數(shù)據(jù)庫處理或某種其他 PHP 外部資源的約束。即使將 PHP 處理降至零,單是查找就仍需要花費超過 7 秒的時間。
甚至很少有約束是并行的 —— 假定某特定頁面將為具體列出的普通股計算建議交易價格,并且計算十分復(fù)雜,需要花費一段時間。計算在本質(zhì)上可能是順序執(zhí)行的。沒有一種明顯的方法可以將其劃分為 “團(tuán)隊協(xié)作”。
很少有 PHP 程序員能夠認(rèn)識到 PHP 實現(xiàn)并發(fā)的潛力。在具有使用并行實現(xiàn)性能需求的少數(shù)人當(dāng)中,我遇到的大多數(shù)人全都說 PHP “不支持線程”,并且甘于使用現(xiàn)有的計算模型。
可是,有時我們可以做得更好。假定 PHP 頁面需要計算兩只股票價格,可能還需要將兩者相比較,并且底層主機(jī)剛好是多處理器。在這種情況下,通過將兩個截然不同并且十分耗時的計算分配給不同處理器,可能會提高幾乎兩倍的性能。
在所有 PHP 計算領(lǐng)域中,此類實例很少見。但是,由于我發(fā)現(xiàn)到處都沒有對它的精確記錄,因此需要在這里包括用于此類加速的模型。
清單 5. 延遲服務(wù)器實現(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 啟動了兩個獨立子進(jìn)程,取回待完成的第一個進(jìn)程的輸出,然后取回第二個進(jìn)程的輸出,即使后者啟動得較早。如果主機(jī)是多處理器計算機(jī),并且操作系統(tǒng)已正確配置,則操作系統(tǒng)本身負(fù)責(zé)將各個子程序分配給不同的處理器。這是在多處理器主機(jī)中良好應(yīng)用 PHP 的一種方法。
PHP 支持多任務(wù)。PHP 不按照諸如 Java 編程語言或 C 等其他語言所采用的方法支持線程,但是以上示例表明 PHP 具有更多的超乎想象的加速潛力。
分享:PHP實現(xiàn)靜態(tài)發(fā)布的方法淺談如今很多網(wǎng)站都是靜態(tài)發(fā)布的,PHP當(dāng)然也可以方便的實現(xiàn)靜態(tài)發(fā)布嘍,具體的實現(xiàn)方法很多,下面我就說說我會的兩種方法。 方法一:ob_get_contents() 這是一種很方便的方法,也是很常用的方法
- PHPNOW安裝Memcached擴(kuò)展方法詳解
- php記錄頁面代碼執(zhí)行時間
- PHP中獎概率的抽獎算法程序代碼
- apache設(shè)置靜態(tài)文件緩存方法介紹
- php對圖像的各種處理函數(shù)代碼小結(jié)
- PHP 關(guān)于訪問控制的和運算符優(yōu)先級介紹
- 關(guān)于PHP語言構(gòu)造器介紹
- php/js獲取客戶端mac地址的實現(xiàn)代碼
- php5.5新數(shù)組函數(shù)array_column使用
- PHP preg_match的匹配多國語言的技巧
- php 中序列化和json使用介紹
- php采集文章中的圖片獲取替換到本地
- 相關(guān)鏈接:
- 教程說明:
PHP教程-利用PHP V5開發(fā)多任務(wù)應(yīng)用程序(6)
。