当前位置:首页 > 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 本身是单线程语言,但可通过以下方式模拟异步:

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)

php实现同步异步

// 生产者(发送异步任务)
$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. 忽略客户端(快速响应)

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 实现定时任务的几种方法 在 PHP 中实现定时任务可以通过多种方式完成,具体选择取决于项目需求和服务器环境。以下是常见的实现方法: 使用 Cron 任务 Cron 是 Linux 系统中常…

php实现表单

php实现表单

PHP 表单基础实现 创建一个简单的 PHP 表单需要 HTML 表单结构和 PHP 处理脚本。以下是一个完整的示例: HTML 表单部分 (form.html) <form actio…

php长连接实现

php长连接实现

PHP 长连接实现方法 长连接(Keep-Alive)允许客户端与服务器在一次TCP连接中发送和接收多个HTTP请求/响应,减少重复建立连接的开销。以下是PHP中实现长连接的几种方式: 配置HT…

php实现登录

php实现登录

PHP 登录功能实现 数据库连接与用户表创建 创建一个数据库连接文件 db.php,用于管理数据库连接。MySQL 示例代码如下: <?php $host = 'localhost'; $db…

php实现排序

php实现排序

PHP 数组排序方法 PHP 提供了多种内置函数用于数组排序,适用于不同的排序需求。以下是常见的排序方法: 按值升序排序 sort() 函数对数组按值升序排序,重置键名(索引数组适用): $num…

基于php的设计与实现

基于php的设计与实现

PHP 设计与实现的关键要素 环境搭建与框架选择 PHP开发需配置服务器环境(如Apache/Nginx)、PHP版本(建议7.4+)及数据库(MySQL/MariaDB)。主流框架包括Laravel…