首页 > 后端开发 > php教程 > 在 PHP 中实现多线程

在 PHP 中实现多线程

WBOY
发布: 2024-02-28 09:24:01
转载
891 人浏览过

在 PHP 中实现多线程一直是开发者们关注的话题。随着互联网应用的不断发展,对于处理大量并发请求的需求也越来越迫切。本文将介绍如何在 PHP 中实现多线程,探讨多线程的优势和适用场景,帮助开发者更好地应对复杂的并发需求。让我们一起来深入了解多线程在 PHP 中的应用吧!


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

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

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

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

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

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

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

<code>
<code class="language-php hljs" data-lang="php"><span style="display:flex;"><span>pecl install parallel
</span></span></code></code>
登录后复制

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

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

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

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

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

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

示例代码:

<code>
<code class="language-php hljs" data-lang="php"><span style="display:flex;"><span><span style="color:#19177c">$rt</span> <span style="color:#666">=</span> <span style="color:#008000;font-weight:bold">new</span> \parallel\Runtime();
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#19177c">$rt</span><span style="color:#666">-></span><span style="color:#7d9029">run</span>(<span style="color:#008000;font-weight:bold">funct<strong class="keylink">io</strong>n</span>(){
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">for</span> (<span style="color:#19177c">$i</span> <span style="color:#666">=</span> <span style="color:#666">0</span>; <span style="color:#19177c">$i</span> <span style="color:#666"><</span> <span style="color:#666">50</span>; <span style="color:#19177c">$i</span><span style="color:#666">++</span>)
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">echo</span> <span style="color:#ba2121">"+"</span>;
</span></span><span style="display:flex;"><span>});
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">for</span> (<span style="color:#19177c">$i</span> <span style="color:#666">=</span> <span style="color:#666">0</span>; <span style="color:#19177c">$i</span> <span style="color:#666"><</span> <span style="color:#666">50</span>; <span style="color:#19177c">$i</span><span style="color:#666">++</span>) {
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">echo</span> <span style="color:#ba2121">"-"</span>;
</span></span><span style="display:flex;"><span>}
</span></span></code></code>
登录后复制

输出:

<code>
<code class="language-text hljs" data-lang="text"><span style="display:flex;"><span>-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
</span></span></code></code>
登录后复制

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

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

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

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

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

模式可以是 rw

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

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

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

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

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

示例代码:

<code>
<code class="language-php hljs" data-lang="php"><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">for</span> (<span style="color:#19177c">$i</span><span style="color:#666">=</span><span style="color:#666">0</span>; <span style="color:#19177c">$i</span><span style="color:#666"><</span><span style="color:#666">5</span>; <span style="color:#19177c">$i</span><span style="color:#666">++</span>) {
</span></span><span style="display:flex;"><span> 
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">for</span> (<span style="color:#19177c">$j</span><span style="color:#666">=</span><span style="color:#666">0</span>; <span style="color:#19177c">$j</span><span style="color:#666"><</span><span style="color:#666">5</span>; <span style="color:#19177c">$j</span><span style="color:#666">++</span>) {
</span></span><span style="display:flex;"><span> <span style="color:#19177c">$process</span>[<span style="color:#19177c">$j</span>] <span style="color:#666">=</span> popen(<span style="color:#ba2121">'message.php'</span>, <span style="color:#ba2121">'r'</span>);
</span></span><span style="display:flex;"><span> }
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">for</span> (<span style="color:#19177c">$j</span><span style="color:#666">=</span><span style="color:#666">0</span>; <span style="color:#19177c">$j</span><span style="color:#666"><</span><span style="color:#666">5</span>; <span style="color:#666">++</span><span style="color:#19177c">$j</span>) {
</span></span><span style="display:flex;"><span> pclose(<span style="color:#19177c">$process</span>[<span style="color:#19177c">$j</span>]);
</span></span><span style="display:flex;"><span> }
</span></span><span style="display:flex;"><span>}
</span></span></code></code>
登录后复制

以上是在 PHP 中实现多线程的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:lsjlt.com
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板