PHPによる並列リクエストの処理

在PHP中处理并发请求可以使用多进程或多线程的方式。1. 多进程处理:可以使用PHP的pcntl扩展来创建多个子进程,每个子进程可以处理一个请求。首先创建一个父进程,然后使用pcntl_fork()函数创建子进程,并在子进程中处理请求。可以使用pcntl_wait()函数回收子进程资源。

$requests = ["url1", "url2", "url3"];
$processes = [];
// 创建子进程处理请求
foreach ($requests as $request) {

$pid = pcntl_fork();

 

if ($pid == -1) {

 

// 创建子进程失败

 

die(“Failed to create child process”);

 

} elseif ($pid) {

 

// 父进程,保存子进程的PID

 

$processes[$pid] = $request;

 

} else {

 

// 子进程,处理请求

 

// 处理请求的代码

 

exit();

 

} } // 回收子进程资源 foreach ($processes as $pid => $request) {

 

pcntl_waitpid($pid, $status); }


複数のスレッドを作成するには PHP の pthreads 拡張を利用できます。各スレッドは1つのリクエストを処理できます。最初にメインスレッドを作成し、その後 Thread クラスを使用して複数の子スレッドを作成し、子スレッドのリクエストを処理します。

class RequestThread extends Thread {

 

private $request;

 

public function __construct($request) {

 

$this->request = $request;

 

}

 

public function run() {

 

// 处理请求的代码

 

} } $requests = [“url1”, “url2”, “url3”]; $threads = []; // 创建子线程处理请求 foreach ($requests as $request) {

 

$thread = new RequestThread($request);

 

$threads[] = $thread;

 

$thread->start(); } // 等待所有子线程结束 foreach ($threads as $thread) {

 

$thread->join(); }


マルチプロセスやマルチスレッドによる同時要求処理には、共有変数の読み書きの安全性や排他制御などのリソース競合と同期の問題が生じる点に留意する必要がある。

bannerAds