首頁 後端開發 php教程 關於php中多進程程式設計的程式碼案例

關於php中多進程程式設計的程式碼案例

Jul 20, 2017 pm 01:14 PM
php 程式碼 案例

這篇文章主要介紹了PHP多進程程式設計方法,較為詳細的分析了PHP多進程程式設計的概念、用法、相關函數與使用技巧,需要的朋友可以參考下

本文實例講述了PHP多進程程式設計。分享給大家參考,具體如下:

第一步:

$ 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 set by the last 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 &#39;原始父进程:&#39; . $parentPid . PHP_EOL;
//创建子进程,返回子进程id
$pid = pcntl_fork();
if( $pid == -1 ){
  exit("fork error");
}
//pcntl_fork 后,父进程返回子进程id,子进程返回0
echo &#39;ID : &#39; . $pid . PHP_EOL;
if( $pid == 0 ){
  //子进程执行pcntl_fork的时候,pid总是0,并且不会再fork出新的进程
  $mypid = getmypid(); // 用getmypid()函数获取当前进程的PID
  echo &#39;I am child process. My PID is &#39; . $mypid . &#39; and my fathers PID is &#39; . $parentPid . PHP_EOL;
} else {
  //父进程fork之后,返回的就是子进程的pid号,pid不为0
  echo &#39;Oh my god! I am a father now! My childs PID is &#39; . $pid . &#39; and mine is &#39; . $parentPid . PHP_EOL;
}
$aa = shell_exec("ps -af | grep index.php");
echo $aa;
登入後複製
######實例二:###開多個子程序,避免fork氾濫############
<?php
//最早的进程,也是父进程
$parentPid = getmypid();
echo &#39;原始父进程:&#39; . $parentPid . PHP_EOL;
//开启十个子进程
for($i = 0; $i < 10; $i++) {
  $pid = pcntl_fork();
  if($pid == -1) {
    echo "Could not fork!\n";
    exit(1);
  }
  //子进程
  if(!$pid) {
    //child process workspace
    echo &#39;子进程:&#39; . getmypid() . PHP_EOL;
    exit(); //子进程逻辑执行完后,马上退出,以免往下走再fork子进程,不好控制  
  } else {
    echo &#39;父进程:&#39; . getmypid() . PHP_EOL;
  }
}
echo getmypid() . PHP_EOL;
$aa = shell_exec("ps -af | grep index.php");
echo $aa;
登入後複製
######注意:### ######透過pcntl_XXX系列函數使用多進程功能。注意:pcntl_XXX只能運行在php CLI(命令列)環境下,在web伺服器環境下,會出現無法預期的結果,請慎用! ###

以上是關於php中多進程程式設計的程式碼案例的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前 By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南 適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南 Dec 24, 2024 pm 04:42 PM

適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南

CakePHP 專案配置 CakePHP 專案配置 Sep 10, 2024 pm 05:25 PM

CakePHP 專案配置

CakePHP 日期和時間 CakePHP 日期和時間 Sep 10, 2024 pm 05:27 PM

CakePHP 日期和時間

CakePHP 檔案上傳 CakePHP 檔案上傳 Sep 10, 2024 pm 05:27 PM

CakePHP 檔案上傳

CakePHP 路由 CakePHP 路由 Sep 10, 2024 pm 05:25 PM

CakePHP 路由

討論 CakePHP 討論 CakePHP Sep 10, 2024 pm 05:28 PM

討論 CakePHP

如何設定 Visual Studio Code (VS Code) 進行 PHP 開發 如何設定 Visual Studio Code (VS Code) 進行 PHP 開發 Dec 20, 2024 am 11:31 AM

如何設定 Visual Studio Code (VS Code) 進行 PHP 開發

CakePHP 快速指南 CakePHP 快速指南 Sep 10, 2024 pm 05:27 PM

CakePHP 快速指南

See all articles