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