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