php 多程序程式設計

2021-07-23 11:49:56 字數 2232 閱讀 8690

第一步:

$ php -m  命令檢視php是否安裝pcntl 和 posix擴充套件,若沒有則安裝
使用場景:

1. 要進行大量的網路耗時的操作

2. 要做大量的運算,並且,系統有多個cpu,為了讓使用者有更快的體驗,把乙個任務,分成幾個小任務,最後合併。

多程序常用函式:

pcntl_alarm — 為程序設定乙個alarm鬧鐘訊號

pcntl_errno — 別名 pcntl_strerror

pcntl_exec — 在當前程序空間執行指定程式

pcntl_fork — 建立子程序,在當前程序當前位置產生分支(子程序)。譯註:fork是建立了乙個子程序,父程序和子程序 都從fork的位置開始向下繼續執行,不同的是父程序執行過程中,得到的fork返回值為子程序 號,而子程序得到的是0。

pcntl_get_last_error — retrieve the error number

setby

thelast pcntl function

which

failed

pcntl_getpriority — 獲取任意程序的優先順序

pcntl_setpriority — 修改任意程序的優先順序

pcntl_signal_dispatch — 呼叫等待訊號的處理器

pcntl_signal — 安裝乙個訊號處理器

pcntl_sigprocmask — 設定或檢索阻塞訊號

pcntl_sigtimedwait — 帶超時機制的訊號等待

pcntl_sigwaitinfo — 等待訊號

pcntl_strerror — retrieve the

system error message associated with

the given errno

pcntl_wait — 等待或返回fork的子程序狀態

pcntl_waitpid — 等待或返回fork的子程序狀態

pcntl_wexitstatus — 返回乙個中斷的子程序的返回**

pcntl_wifexited — 檢查狀態**是否代表乙個正常的退出。

pcntl_wifsignaled — 檢查子程序狀態碼是否代表由於某個訊號而中斷

pcntl_wifstopped — 檢查子程序當前是否已經停止

pcntl_wstopsig — 返回導致子程序停止的訊號

pcntl_wtermsig — 返回導致子程序中斷的訊號

例項一:

<?php

//最早的程序,也是父程序

$parentpid = getmypid();

echo

'原始父程序:' . $parentpid . php_eol;

//建立子程序,返回子程序id

$pid = pcntl_fork();

if( $pid == -1 )

//pcntl_fork 後,父程序返回子程序id,子程序返回0

echo

'id : ' . $pid . php_eol;

if( $pid == 0 ) else

$aa = shell_exec("ps -af | grep index.php");

echo

$aa;

例項二:開多個子程序,避免fork氾濫

<?php

//最早的程序,也是父程序

$parentpid = getmypid();

echo

'原始父程序:' . $parentpid . php_eol;

//開啟十個子程序

for($i = 0; $i

< 10; $i++)

//子程序

if(!$pid) else

}echo getmypid() . php_eol;

$aa = shell_exec("ps -af | grep index.php");

echo

$aa;

注意:

通過pcntl_***系列函式使用多程序功能。注意:pcntl_***只能執行在php cli(命令列)環境下,在web伺服器環境下,會出現無法預期的結果,請慎用!

PHP多程序程式設計

php本身不支援多執行緒,多程序支援的也不是特別好,網上找到乙份多程序 寫了乙個測試程式簡單測了一下,可以執行,但是離上線還差得很遠。project signfork php多執行緒庫 file signfork.class.php class signfork if is array arg sp...

PHP多程序程式設計(一)

雖然php 中,多程序用的比較的少。但是畢竟可能是會用到了。我最近就遇到這樣乙個問題,使用者提交幾百個url以後,要讀出這個url 中的標題。當然,你不希望使用者等待的太久,10s 鐘應該給出個答案。但是,本身,你要獲取乙個url 的標題,少的要 0.1s 多的要好幾秒。顯然,採用單個執行緒的方式是...

PHP多程序程式設計(一)

雖然php 中,多程序用的比較的少。但是畢竟可能是會用到了。我最近就遇到這樣乙個問題,使用者提交幾百個url以後,要讀出這個url 中的標題。當然,你不希望使用者等待的太久,10s 鐘應該給出個答案。但是,本身,你要獲取乙個url 的標題,少的要 0.1s 多的要好幾秒。顯然,採用單個執行緒的方式是...