php 多程序程式設計父程序的阻塞與非阻塞例項分析

2022-09-26 03:24:08 字數 1239 閱讀 2974

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 多的要好幾秒。顯然,採用單個執行緒的方式是...