我們先來看看到底什么是異步。
提到異步就不得不提另外一個概念:同步。
那什么又叫同步呢?
很多初學(xué)者在剛接觸這個概念時會想當(dāng)然的認(rèn)為同步就是同時進(jìn)行。
顯然,這樣的理解是錯誤的,咱不能按字面意思去理解它。
同步,英文全稱叫做Synchronization。
它是指同一時間只能做一件事,也就是說一件事情做完了才能做另外一件事。
比如咱們?nèi)セ疖囌举I票,假設(shè)窗口只有1個,那么同一時間只能處理1個人的購票業(yè)務(wù),其余的需要進(jìn)行排隊(duì)。
這種one by one的動作就是同步。
這種同步的情況其實(shí)有很多,任何需要排隊(duì)的情況都可以理解成同步。
那如果在程序中呢,我們都知道代碼的執(zhí)行是一行接著一行的,比如下面這段代碼:
let ary = []; for(let i = 0;i < 100;i++){ ary[i] = i; } console.log(ary);
這段代碼的執(zhí)行就是從上往下依次執(zhí)行,循環(huán)沒執(zhí)行完,輸出的代碼就不會執(zhí)行,這就是典型的同步。在程序中,絕大多數(shù)代碼都是同步的。
同步操作的優(yōu)點(diǎn)在于做任何事情都是依次執(zhí)行,井然有序,不會存在大家同時搶一個資源的問題。
你想想,如果火車站取消排隊(duì)機(jī)制,那么大家勢必會爭先恐后去搶著買票,造成的結(jié)果就是秩序大亂,甚至可能引發(fā)一系列安全問題。
如果代碼不是同步執(zhí)行的又會發(fā)生什么呢?
有些代碼需要依賴前面代碼執(zhí)行后的結(jié)果,但現(xiàn)在大家都是同時執(zhí)行,那結(jié)果就不一定能獲取到。
而且這些代碼可能在對同一數(shù)據(jù)就進(jìn)行操作,也會讓這個數(shù)據(jù)的值出現(xiàn)不確定的情況。
當(dāng)然同步也有它的缺點(diǎn)。由于是依次進(jìn)行,假如其中某一個步驟花的時間比較長,那么后續(xù)動作就會等待它的完成,從而影響效率。
不過,在有些時候我們還是希望能夠在效率上有所提升,也就是說可以讓很多操作同時進(jìn)行。
這就是另外一個概念:異步
假設(shè)火車站有10個人需要買票,現(xiàn)在只有1個窗口提供服務(wù),如果平均每個人耗費(fèi)5分鐘,那么總共需要50分鐘才能辦完所有人的業(yè)務(wù)。
火車站為了提高效率,加開了9個窗口,現(xiàn)在一共有10個窗口提供服務(wù),那么這10個人就可以同時辦理了,總共只需要5分鐘,他們所有人的業(yè)務(wù)都可以辦完。這就是異步帶來的優(yōu)勢。
以上就是今天的分享啦~