在Android的API當中handler消息處理、Broadcast廣播消息等均采用異步通信機制。什么是異步通信機制呢?和它相對的同步通信機制又是什么呢?有什么區別呢?
Synchronous(同步)和Asynchronous(異步)的概念最早來自通信領域。
通信的同步:指客戶端在發送請求后,必須要在服務端有回應后客戶端才繼續發送其他請求,所以這時所有請求將會在服務端得到同步,直到服務端返回請求。
通信的異步:指客戶端在發送請求后,不必等待服務端的回應就可以發送下一個請求,對所有的請求動作來說將會在服務端得到異步,這條請求的鏈路就像是一個請求隊列,所有的請求動作在這里不會得到同步。
在軟件世界中,我們常說的“同步和異步”,更多是指函數、方法調用的“同步和異步”,也就是“同步調用和異步調用”。
所謂同步調用,在發起一個函數或方法調用時,沒有得到結果之前,該調用就不返回,直到返回結果;異步調用的概念和同步相對,在一個異步調用發起后,被調用者立即返回給調用者,但調用者不能立刻得到結果,被調用者在實際處理這個調用的請求完成后,通過狀態、通知或回調等方式來通知調用者請求處理的結果。
注意 現在清楚同步和異步嗎?簡單地說,同步就是發出一個請求后什么事都不做,一直等待請求返回后才會繼續做事;異步就是發出請求后繼續去做其他事,這個請求處理完成后會通知你,這時候就可以處理這個回應了。
單從任務調用來講,對於同一個任務,異步調用並不能加快這個任務的執行速度和效率,相反會降低執行速度和效率。站在整個系統的層面上考慮,異步調用使得整個系統的性能效率提高,各個組件之間運行配合更加協調。這才是異步調用的真正優點。
所謂異步輸入輸出機制,是指在進行輸入輸出處理時,不必等到輸入輸出處理完畢才返回。所以異步的同義語是非阻塞(None Blocking)。
網上有很多網友用很通俗的比喻 把同步和異步講解的很透徹 轉過來
舉個例子:普通B/S模式(同步)AJAX技術(異步)
同步:提交請求->等待服務器處理->處理完畢返回 這個期間客戶端瀏覽器不能干任何事
異步: 請求通過事件觸發->服務器處理(這是瀏覽器仍然可以作其他事情)->處理完畢
同步就是你叫我去吃飯,我聽到了就和你去吃飯;如果沒有聽到,你就不停的叫,直到我告訴你聽到了,才一起去吃飯。
異步就是你叫我,然后自己去吃飯,我得到消息后可能立即走,也可能等到下班才去吃飯。
所以,要我請你吃飯就用同步的方法,要請我吃飯就用異步的方法,這樣你可以省錢。
以通訊為例
同步:發送一個請求,等待返回,然后再發送下一個請求
異步:發送一個請求,不等待返回,隨時可以再發送下一個請求
並發:同時發送多個請求
