1. 同步異步是啥?打個比方:
定義:同步和異步關注的是消息通信機制(synchronous communication/ asynchronous communication)官边。同步崇渗,就是調(diào)用某個東西是筋讨,調(diào)用方得等待這個調(diào)用返回結果才能繼續(xù)往后執(zhí)行谆棺。異步叹螟,和同步相反 調(diào)用方不會理解得到結果魄宏,而是在調(diào)用發(fā)出后調(diào)用者可用繼續(xù)執(zhí)行后續(xù)操作秸侣,被調(diào)用者通過狀體來通知調(diào)用者,或者通過回掉函數(shù)來處理這個調(diào)用
比方說:你去商城買東西宠互,你看上了一款手機味榛,能和店家說你一個這款手機,他就去倉庫拿貨名秀,你得在店里等著励负,不能離開,這叫做同步∝暗茫現(xiàn)在你買手機趕時髦直接去京東下單继榆,下單完成后你就可用做其他時間(追劇、打王者汁掠、lol)等貨到了去簽收就ok了.這就叫異步略吨。
2. 更具體點那我們的方法調(diào)用來舉例子:
同步方法調(diào)用一旦開始,調(diào)用者必須等到方法調(diào)用返回后考阱,才能繼續(xù)后續(xù)的行為翠忠。
異步方法調(diào)用更像一個消息傳遞,一旦開始乞榨,方法調(diào)用就會立即返回秽之,調(diào)用者就可以繼續(xù)后續(xù)的操作。而吃既,異步方法通常會在另外一個線程中考榨,“真實”地執(zhí)行著。整個過程鹦倚,不會阻礙調(diào)用者的工作
3. 加兩張圖讓你更好理解
同步執(zhí)行
同步執(zhí)行當調(diào)用方法執(zhí)行完成后并返回結果河质,才能執(zhí)行后續(xù)代碼
異步執(zhí)行
異步調(diào)用的話可用參考ajax,調(diào)用方法后不會等到sum方法執(zhí)行完成,而是直接執(zhí)行后續(xù)代碼掀鹅。sum方法執(zhí)行完成后主要通過狀態(tài)通知主線程散休,或者通過回調(diào)處理這次異步方法執(zhí)行的結果
4. 同步異步于阻塞非阻塞不能混為一談
看了上面的講解,你可能會說這不就是阻塞機制嗎乐尊?不不不戚丸,同步異步不能和阻塞非阻塞混為一談。
阻塞和非阻塞 強調(diào)的是程序在等待調(diào)用結果(消息扔嵌,返回值)時的狀態(tài). 阻塞調(diào)用是指調(diào)用結果返回之前昏滴,當前線程會被掛起。調(diào)用線程只有在得到結果之后才會返回对人。非阻塞調(diào)用指在不能立刻得到結果之前,該調(diào)用不會阻塞當前線程拂共。 對于同步調(diào)用來說牺弄,很多時候當前線程還是激活的狀態(tài),只是從邏輯上當前函數(shù)沒有返回而已宜狐,即同步等待時什么都不干势告,白白占用著資源。
同步和異步強調(diào)的是消息通信機制 (synchronous communication/ asynchronous communication)抚恒。所謂同步咱台,就是在發(fā)出一個"調(diào)用"時,在沒有得到結果之前俭驮,該“調(diào)用”就不返回回溺。但是一旦調(diào)用返回,就得到返回值了混萝。換句話說遗遵,就是由“調(diào)用者”主動等待這個“調(diào)用”的結果。而異步則是相反逸嘀,"調(diào)用"在發(fā)出之后车要,這個調(diào)用就直接返回了,所以沒有返回結果崭倘。換句話說翼岁,當一個異步過程調(diào)用發(fā)出后,調(diào)用者不會立刻得到結果司光。而是在"調(diào)用"發(fā)出后琅坡,"被調(diào)用者"通過狀態(tài)、通知來通知調(diào)用者飘庄,或通過回調(diào)函數(shù)處理這個調(diào)用