第一步:
$ 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 — 返回導致子程序中斷的訊號
例項二:開多個子程序,避免fork氾濫<?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;
注意:<?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 多的要好幾秒。顯然,採用單個執行緒的方式是...