当前位置:首页 > PHP

php实现同步异步

2026-02-16 15:52:19PHP

PHP 实现同步与异步处理

同步处理

同步处理是代码按顺序执行,每个操作完成后再执行下一个。PHP 默认以同步方式运行。

// 同步示例
function syncTask() {
    echo "Task 1\n";
    echo "Task 2\n"; // Task 2 会在 Task 1 完成后执行
}
syncTask();

异步处理

PHP 本身是单线程语言,但可通过以下方式模拟异步:

1. 多进程(PCNTL 扩展)

$pid = pcntl_fork();
if ($pid == -1) {
    die("Fork failed");
} elseif ($pid) {
    // 父进程
    pcntl_wait($status); // 可选:等待子进程结束
} else {
    // 子进程(异步执行)
    sleep(2);
    echo "Async task completed\n";
    exit;
}

2. 消息队列(如 RabbitMQ)

// 生产者(发送异步任务)
$connection = new AMQPConnection(['host' => 'localhost']);
$channel = $connection->channel();
$channel->queue_declare('async_queue');
$channel->basic_publish(new AMQPMessage('Task data'), '', 'async_queue');

3. 协程(Swoole 扩展)

Swoole\Runtime::enableCoroutine();
go(function () {
    co::sleep(1); // 非阻塞睡眠
    echo "Async coroutine\n";
});
echo "Main script\n"; // 先输出

4. 忽略客户端(快速响应)

php实现同步异步

ignore_user_abort(true); // 忽略客户端断开
ob_start();
echo "Response sent to client";
header('Connection: close');
header('Content-Length: ' . ob_get_length());
ob_end_flush();
flush();

// 继续执行后台任务
file_put_contents('async.log', 'Task completed', FILE_APPEND);

关键区别

  • 同步:阻塞式,适合需要严格顺序的任务。
  • 异步:非阻塞式,适合耗时操作(如邮件发送、文件处理)。

注意事项

  • PCNTL 和 Swoole 需安装扩展。
  • 消息队列需额外服务支持(如 RabbitMQ)。
  • 异步日志建议记录执行状态以便排查问题。

标签: php
分享给朋友:

相关文章

php实现队列

php实现队列

PHP实现队列的方法 队列是一种先进先出(FIFO)的数据结构,PHP可以通过多种方式实现队列功能。 使用数组模拟队列 PHP数组可以模拟队列的基本操作,通过array_push和array_shi…

php 实现登录

php 实现登录

PHP 登录功能实现 使用 PHP 实现登录功能通常需要结合数据库验证和会话管理。以下是一个基本的登录实现流程: 数据库准备 创建用户表存储用户名和密码(建议使用哈希加密): CREATE TAB…

php实现异步

php实现异步

PHP 实现异步的方法 PHP 本身是同步执行的脚本语言,但可以通过以下方法模拟异步操作或实现异步效果: 使用多进程(pcntl_fork) 通过 pcntl_fork 创建子进程实现异步,适用于…

php 实现类

php 实现类

PHP 类的基本实现 在 PHP 中,类通过 class 关键字定义,后跟类名和一对花括号。类名通常遵循大驼峰命名法(如 ClassName)。以下是基本语法: class ClassName {…

php 队列的实现

php 队列的实现

PHP 队列的实现方法 使用数据库实现队列 创建一个数据表存储队列任务,包含任务ID、状态、创建时间等字段。通过SQL语句实现任务的入队和出队操作。 // 入队操作 INSERT INTO queu…

php实现单一入口

php实现单一入口

PHP 单一入口实现方法 单一入口(Single Entry Point)是一种设计模式,通过一个入口文件(如index.php)集中处理所有请求,实现路由分发、统一初始化等操作。以下是实现方法:…