Beispiel für die Programmierung einer PHP-Mehrprozessimplementierung

不言
Freigeben: 2023-03-25 14:06:02
Original
1621 Leute haben es durchsucht

Dieser Artikel stellt hauptsächlich die Programmierbeispiele der PHP-Multiprozessimplementierung vor, die einen gewissen Referenzwert haben. Jetzt kann ich ihn mit allen teilen, die ihn brauchen.

PHP-Multiprozess Implementierung

PHP verfügt über eine Reihe von Prozesssteuerungsfunktionen (beim Kompilieren sind die Erweiterungen -enable-pcntl und posix erforderlich), die es PHP ermöglichen, untergeordnete Prozesse zu erstellen, die exec-Funktion zum Ausführen von Programmen zu verwenden und zu verarbeiten Signale im Nginx-System, genau wie c.

Bei der Installation von PHP unter yum unter CentOS 6 wird pcntl nicht standardmäßig installiert, daher müssen Sie es zuerst separat kompilieren und installieren und entpacken

cd php-version/ext/pcntl 
phpize 
./configure && make && make install 
cp /usr/lib/php/modules/pcntl.so /usr/lib64/php/modules/pcntl.so 
echo "extension=pcntl.so" >> /etc/php.ini 
/etc/init.d/httpd restart
Nach dem Login kopieren

Komfort Großartig.

Das Folgende ist der Beispielcode:

<?php 
header(&#39;content-type:text/html;charset=utf-8&#39; ); 
 
// 必须加载扩展 
if (!function_exists("pcntl_fork")) { 
 die("pcntl extention is must !"); 
} 
//总进程的数量 
$totals = 3; 
// 执行的脚本数量 
$cmdArr = array(); 
// 执行的脚本数量的数组 
for ($i = 0; $i < $totals; $i++) { 
 $cmdArr[] = array("path" => __DIR__ . "/run.php", &#39;pid&#39; =>$i ,&#39;total&#39; =>$totals); 
} 
 /* 
展开:$cmdArr 
Array 
( 
 [0] => Array 
  ( 
   [path] => /var/www/html/company/pcntl/run.php 
   [pid] => 0 
   [total] => 3 
  ) 
 [1] => Array 
  ( 
   [path] => /var/www/html/company/pcntl/run.php 
   [pid] => 1 
   [total] => 3 
  ) 
 [2] => Array 
  ( 
   [path] => /var/www/html/company/pcntl/run.php 
   [pid] => 2 
   [total] => 3 
  ) 
) 
*/ 
 
pcntl_signal(SIGCHLD, SIG_IGN); //如果父进程不关心子进程什么时候结束,子进程结束后,内核会回收。 
foreach ($cmdArr as $cmd) { 
 $pid = pcntl_fork(); //创建子进程 
 //父进程和子进程都会执行下面代码 
 if ($pid == -1) { 
  //错误处理:创建子进程失败时返回-1. 
  die(&#39;could not fork&#39;); 
 } else if ($pid) { 
  //父进程会得到子进程号,所以这里是父进程执行的逻辑 
  //如果不需要阻塞进程,而又想得到子进程的退出状态,则可以注释掉pcntl_wait($status)语句,或写成: 
  pcntl_wait($status,WNOHANG); //等待子进程中断,防止子进程成为僵尸进程。 
 } else { 
  //子进程得到的$pid为0, 所以这里是子进程执行的逻辑。 
  $path = $cmd["path"]; 
  $pid = $cmd[&#39;pid&#39;] ; 
  $total = $cmd[&#39;total&#39;] ; 
  echo exec("/usr/bin/php {$path} {$pid} {$total}")."\n"; 
  exit(0) ; 
 } 
} 
?>
Nach dem Login kopieren

Verwandte Empfehlungen:

PHP mehr Prozessverarbeitung paralleler Aufgaben

Detaillierte Erläuterung von PHP-Multiprozess-Programmierbeispielen

Das obige ist der detaillierte Inhalt vonBeispiel für die Programmierung einer PHP-Mehrprozessimplementierung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage