PHP 并发并行-php教程

首页 2024-07-09 18:51:12

并发与并行是现代编程的基本概念,允许应用程序同时交错执行(并发)或执行(并行)多个任务。 PHP 它以其同步执行模型而闻名,现已发展成为通过各种技术支持这些模型。

PHP 标准执行模型

PHP 传统上遵循同步执行模型,尤其是典型的模型 Web 中和服务器设置 Apache 一起使用时。在这个模型中,每个模型 HTTP 所有的请求都是单一的 PHP 过程处理。处理请求涉及的步骤包括:

  1. Apache 接收 HTTP 请求 并转发给它 PHP。
  2. PHP 脚本从头到尾执行在单个线程中
  3. PHP 将输出 返回给 Apache,然后 Apache 将响应发送回客户端。
该模型确保简单易懂,但对于需要并行执行或同时处理多个任务的任务,可能会变得低效。

PHP 并发性和并行性的演变 随着 Web 应用程序变得越来越复杂,PHP 对中并发和并行执行的需求也在增加。让我们探索一下 PHP 实现这些例子的技术。

1. 同步代码 同步代码是最简单的执行形式,任务一个接一个地执行。


echo 同步代码示例:n"; 函数 synchronousFunction() { 为 ($i = 0; $i 在这个例子中,循环的每个迭代都是按顺序执行的,迭代之间有一秒钟的延迟。这种方法非常简单,但对于那些能够从并行执行中受益的人来说 I/O 密集型或 CPU 密集型任务效率低下。

2. 分叉进程 分叉创建一个与原始进程(父进程)同时运行的新进程(子进程)。这对并行任务非常有用。


echo "nForking 进程示例:n"; 函数 forkProcess() { $pid = pcntl_fork(); 如果($pid==-1){ die('不能分叉'); } 否则如果 ($pid) { echo "父进程: PID $pidn"; pcntl_wait($状态); // 预防僵尸儿童 } 别的 { echo "子进程:您好,来自子进程!n"; 退出(0); } } forkProcess();



在这个代码中,pcntl_fork() 创建了一个子过程。父亲的过程和子过程同时执行,允许并行任务执行。父亲的过程等待子过程完成,以避免创建僵尸过程。

3. 线程 PHP 可通过线程功能 pthreads 等待扩展。线程比过程轻,共享相同的内存空间,因此适用于需要共享数据的任务。


if (!class_exists(线程) { die("此 PHP 版本不支持线程”); } echo "nThreading 示例:n"; 类 MyThread 扩展 Thread { ()公共函数运行(){ 为 ($i = 0; $i start(); $线程->join();



这个例子定义了扩展Thread的MyThread类。 run方法在一个新的线程中执行,并与主线程并发运行。这种方法适用于 I/O 密集操作非常有用,线程可以处理等待资源。

4. 发电机 该生成器提供了一种实现简单协同例程的方法,允许函数迭代而不阻塞整个程序。


echo "nGenerators 示例:n"; 函数简单生成器(){ “第一”产生“第一”; 产量“第二”; 产生“第三”; } $gen = simpleGenerator(); foreach ($gen as $value) { echo “生成器产量: $valuen"; }



生成器使用yield关键字一次生成一个值,允许暂停和恢复函数,促进协作多任务处理。

PHP 从同步的根源到支持各种形式的并发性和并行性都取得了很大的进展。虽然同步代码对许多用例仍然简单有效,但分叉过程、线程和生成器的使用为有效处理复杂和平行的任务开辟了新的可能性。

以上是PHP 请更多关注其他相关文章的并发和并行细节!


p