雖然我們生活在一個異步的世界里,但對于多數(shù)編程初學(xué)者來說,異步還是很陌生。學(xué)習(xí)一門編程語言,通常都是從同步流程開始的,即順序、分支和循環(huán)。而異步流程是什么呢——開始一個異步調(diào)用,然后……就沒有然后了。異步程序跑哪去了?
異步程序會以某種異步的形式在運行著,比如多線程、異步IO等,直到處理完成。那如果需要處理結(jié)果怎么辦?給一個程序入口,讓它處理完當(dāng)前過程之后,把處理結(jié)果送到這個入口,然后執(zhí)行另一段程序——俗稱回調(diào)?;卣{(diào)一般使用?callback?這個名稱,不過有時候我更喜歡使用?next,因為它代表著下一個處理步驟。
同步和異步的概念
現(xiàn)在我們接觸到了一些概念,比如同步和異步,它們是什么?
這兩個概念并不來源于編程語言,而是來源于低層指令,甚至更低層的——電路。它們是基于時序的兩個概念,其中,“步”是指步調(diào),所以同步表示相同的步調(diào),而異步表示不同的步調(diào)。當(dāng)然這兩個概念提升到程序這個級別的時候,精確的意思與時鐘無關(guān),但所表示的意義仍然未變。
同步
舉個生活中的例子來說明這個問題——排除買票。售票廳開了一個窗口,有一隊人在排隊依次買票。這個隊伍中,前面一個人往前走了一步,后面的人才能往前走一步;前面的人在等待,后面的人就一定在等待。那么在理想的情況下,所有人可以同時向前邁步。OK,大家步伐一致,稱為同步。
這里把售票窗口看作是處理器,每個人看作是等待執(zhí)行的指令,買票這個動作就是在執(zhí)行指令。它的特點是按步就班,如果一個人買票時間過長(指令執(zhí)行時間過長),就會造成阻塞。
轉(zhuǎn)載自51CTO博客,更多內(nèi)容請:點我跳轉(zhuǎn)