首页 > 文章列表 > 使用 PHP 实现并发操作

使用 PHP 实现并发操作

PHP编程 后端开发
333 2024-04-21

多线程是程序执行的一种形式,其中单个进程创建多个线程,并且它们同时执行。本教程将讨论 PHP 中的多线程并演示如何实现它。


php 中使用 Parallel 并行并发扩展实现多线程

使用 Parallel 并行并发扩展,我们可以在 PHP 中实现多线程。

该扩展提供了一个解释线程 parallelRuntime。我们可以从 parallelRuntime() 类创建一个对象,从而创建一个线程。

该类提供了一个方法 run(),它安排任务并行运行。我们可以将 Closure 作为参数传递给 run 方法。

该参数一般称为 task,我们也可以指定一个数组作为方法的第二个参数。数组的内容被传递给任务。

在下载 Parallel 并行并发扩展之前有一些要求。PHP 版本应该是 8.0,并且应该启用 Zend Thread Safe (ZTS)。

<pthread.h> 标头是另一个要求。我们可以从 pecl 下载扩展程序,如下所示。


pecl install parallel

我们可以使用 for 循环来测试程序的并行执行。

例如,我们可以在 run() 方法内运行一个循环,并在该方法外运行另一个循环。在这种情况下,代码执行将是并行的。

例如,创建 parallelRuntime 类的对象 $rt,然后使用该对象调用 run() 方法。在 run() 方法中,编写一个匿名函数。

首先,编写一个 for 循环以在函数内打印 + 符号 50 次。接下来,在 run() 方法之外,编写另一个 for 循环来打印 - 符号 50 次。

由于 run() 方法内的循环在单独的线程中运行,run() 方法外的循环将同时执行。结果,-+ 符号同时打印,如下面的输出部分所示。

因此,我们可以使用并行并发扩展来实现 PHP 中的多线程。

示例代码:


$rt = new parallelRuntime();

$rt->run(function(){
 for ($i = 0; $i < 50; $i++)
 echo "+";
});

for ($i = 0; $i < 50; $i++) {
 echo "-";
}

输出:


-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

在 PHP 中使用 popen() 函数实现多线程

我们可以使用 popen() 函数在 PHP 中打开并行进程。

该函数对进程进行分叉,从而实现并行处理。进程不共享资源。

这样,我们就可以在 PHP 中实现多线程了。popen() 函数创建一个到分叉进程的管道。

我们可以遍历 popen() 函数并创建多个进程来实现多线程。popen() 函数将 command 作为第一个参数,将 mode 作为第二个参数。

模式可以是 rw

例如,创建一个循环五次的 for 循环。在循环内部,创建另一个循环五次的 for 循环。

在子循环内,创建一个数组 $process 来存储 popen() 函数。将 PHP 文件 message.phpr 模式设置为第一个和第二个参数。

接下来,创建另一个子循环并使用 pclose() 函数关闭 $process

在这里,五个进程在第一个子循环中并行执行。进程在第二个子循环中用 pclose() 函数终止。

这就是我们如何使用 PHP 中的 popen() 函数来实现多线程。

示例代码:


for ($i=0; $i<5; $i++) {
 
 for ($j=0; $j<5; $j++) {
 $process[$j] = popen('message.php', 'r');
 }

 for ($j=0; $j<5; ++$j) {
 pclose($process[$j]);
 }
}