迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > PHP >

在 PHP 中实现多线程

作者:迹忆客 最近更新:2023/03/29 浏览次数:

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


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

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

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

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

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

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

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

pecl install parallel

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

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

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

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

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

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

示例代码:

$rt = new \parallel\Runtime();

$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]);
 }
}

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

如何在 PHP 中获取时间差的分钟数

发布时间:2023/03/29 浏览次数:183 分类:PHP

本文介绍了如何在 PHP 中获取时间差的分钟数,包括 date_diff()函数和数学公式。它包括 date_diff()函数和数学公式。

PHP 中的重定向

发布时间:2023/03/29 浏览次数:136 分类:PHP

本教程演示了如何将用户从页面重定向到 PHP 中的其他页面

PHP 分页

发布时间:2023/03/29 浏览次数:66 分类:PHP

本教程介绍如何在 PHP 中对数据库行进行分页

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便