[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 "發送郵件中";
```
通過新開一個進程去處理發送郵件的任務,在當前進程中不關心發送郵件的結果,直接往下執行。

- 引言
- 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
- 提問的藝術