[TOC]
# 同步
******
同步代码主要是指调用某个逻辑,会等待到该逻辑返回调用结果。
例如:
```php
<?php
$num = 30;
$result = M('test')->select(); // 伪代码,查询数据库
sleep(3); // 伪代码,当成执行了3秒才返回
echo json_encode($result); // 返回数据
```
只有当 select 查询到数据时,才会返回数据给 $result,这个值一定是数据库操作完毕返回的值。
例如:
```php
<?php
$num = -30;
$result = abs($num);
echo json_encode($result); // 返回数据
```
abs 会返回数据给 $result,这个值一定是 abs 正确操作的值
例如:
用户请求 www.easyswoole.com,页面会一直等待 easyswoole 响应数据。
例如:
```php
<?php
// 模拟发送邮件中
$status = send();
sleep(30); // 发送邮件花费30秒
echo "发送邮件" . $status ? '完成' : '失败';
```
等待发送邮件的成功/失败,就是同步。
<br />
# 异步
异步代码主要是指调用某个逻辑时,不会等待该逻辑返回的结果,只会返回是否已经调用的最初结果(或不返回)。
例如:
调用 $.ajax(),默认情况下是异步 ajax,它会继续往下执行代码,当有结果返回时通知回调事件进行处理。
例如:
```php
<?php
$pid = pcntl_fork();
if ($pid == 0) {
// 子进程
// 模拟发生邮件
sleep(30); // 发送邮件花费30秒
exit(0);
}
pcntl_waitpid($pid, $status, WNOHANG);
echo "发送邮件中";
```
通过新开一个进程去处理发送邮件的任务,在当前进程中不关心发送邮件的结果,直接往下执行。
![](https://img.kancloud.cn/ef/9c/ef9c829f89b3a76b85a2efd62952c0c6_783x863.png)
- 引言
- Introduction
- 运行模式
- php-fpm
- php-cli
- 基础介绍
- 网络协议
- ip
- tcp
- tcp
- http
- webSocket
- udp
- port端口
- 会话管理
- cookie
- session
- api/token
- linux基础
- lnmp安装
- 命令
- 进程管理
- 扩展安装
- 端口监控
- 防火墙说明
- php7.0
- 部分新特性
- php回调/闭包
- 回调事件
- 闭包/匿名函数
- php多进程
- 多进程开启
- 进程通信
- 进程信号
- 僵尸进程
- 孤儿进程
- 守护进程
- 同步/异步
- 阻塞/非阻塞
- 协程
- Swoole
- 初始Swoole
- 运行机制
- 生命周期
- composer使用
- EasySwoole
- 设计理念
- 组件说明
- 运行过程
- demo
- 提问的艺术