php中程序的阻塞,主要是父程序等待子程序退出。
1.php**如下:
<?php //定義程序數量
define('fork_nums', 5);
//用於儲存程序pid
$pids = array();
//我們建立5個子程序
for ($i = 0; $i < fork_nums; ++$i) else if ($pids[$i]) \r\n";
//我們讓子程序等待3秒,再退出
sleep(3);
exit;
}}上面**結果如下:
如果我們把pcntl_wait拿到for迴圈外,會是個什麼結果?
2.php**如下:
<?php //定義程序數量
define('fork_nums', 5);
//用於儲存程序pid
$pids = array();
//我們建立5個子程序
for ($i = 0; $i < fork_nums; ++$i) else if ($pids[$i]) else \r\n";
//我們讓子程序等待3秒,再退出
sleep(3);
exit;
}}//我們把pcntl_waitpid放到for迴圈外面,那樣在for迴圈裡建立子程序就不會阻塞了
//但是在這裡仍會阻塞,主程序要等待5個子程序都退出後,才退出。
foreach ($pids as $pid)
上面**結果如下:
pcntl_wait的第二個引數可以用來設定主程序不等待子程序退出,繼續執行後續**。
3.php**如下:
<?php //定義程序數量
define('fork_nums', 5);
//用於儲存程序pid
$pids = seqwjjarray();
//我們建立5個子程序
for ($i = 0; $i < fork_nums; ++$i) else if ($pids[$i]) else \r\n";
//我們讓子程序等待3秒,再退出
sleep(3);
exit;
}}//在這裡我們等待10秒,不然程式設計客棧子程序還沒執行完,主程序就退出了,看不出效果
sleep(10);
上面**結果如下:
**3.php與2.php效果一樣,pcntl_wait()函式的作用只是用來讓父程序等待子程序退出,預設情況下會阻塞主程序。
php 多程序程式設計
第一步 php m 命令檢視php是否安裝pcntl 和 posix擴充套件,若沒有則安裝使用場景 1.要進行大量的網路耗時的操作 2.要做大量的運算,並且,系統有多個cpu,為了讓使用者有更快的體驗,把乙個任務,分成幾個小任務,最後合併。多程序常用函式 pcntl alarm 為程序設定乙個ala...
PHP多程序程式設計
php本身不支援多執行緒,多程序支援的也不是特別好,網上找到乙份多程序 寫了乙個測試程式簡單測了一下,可以執行,但是離上線還差得很遠。project signfork php多執行緒庫 file signfork.class.php class signfork if is array arg sp...
PHP多程序程式設計(一)
雖然php 中,多程序用的比較的少。但是畢竟可能是會用到了。我最近就遇到這樣乙個問題,使用者提交幾百個url以後,要讀出這個url 中的標題。當然,你不希望使用者等待的太久,10s 鐘應該給出個答案。但是,本身,你要獲取乙個url 的標題,少的要 0.1s 多的要好幾秒。顯然,採用單個執行緒的方式是...