同步
同步代碼主要是指調用某個邏輯時,會等待到該邏輯返回調用結果.
例如:
<?php
$num = 30;
$result = M('test')->select();//偽代碼,查詢數據庫
sleep(3);//偽代碼,當成執行了3秒才返回
echo json_encode($result);//返回數據
只有當select查詢到數據時,才會返回數據給$result,這個值一定是數據庫操作完畢返回的值
例如:
<?php
$num = -30;
$result = abs($num);
echo json_encode($result);//返回數據
abs會返回數據給$result,這個值一定是abs正確操作的值
例如:
用戶請求www.jrrswxmm.cn,頁面會一直等待easyswoole響應數據.
例如:
<?php
//模擬發送郵件中
$status = send();
sleep(30);//發送郵件花費30秒
echo "發送郵件".$status?'完成':'失敗';
等待發送郵件的成功/失敗,就是同步
異步
異步代碼主要是指調用某個邏輯時,不會等待該邏輯返回的結果,只會返回是否已經調用的最初結果(或不返回)
例如:
調用$.ajax(),默認情況下是異步ajax,它會繼續往下執行代碼,當有結果返回時通過回調事件進行處理.
例如:
<?php
$pid = pcntl_fork();
if ($pid == 0) {
//子進程
//模擬發送郵件
sleep(30);//發送郵件花費30秒
exit(0);
}
pcntl_waitpid($pid, $status, WNOHANG);
echo "發送郵件中";
通過新開一個進程去處理發送郵件的任務,在當前進程中不關心發送郵件的結果,直接往下執行