Android 同步異步區別

在Android的API當中handler消息處理、Broadcast廣播消息等均採用異步通信機制。什麼是異步通信機制呢?和它相對的同步通信機制又是什麼呢?有什麼區別呢?

Synchronous(同步)和Asynchronous(異步)的概念最早來自通信領域。

通信的同步:指客戶端在發送請求後,必須要在服務端有迴應後客戶端才繼續發送其他請求,所以這時所有請求將會在服務端得到同步,直到服務端返回請求。

通信的異步:指客戶端在發送請求後,不必等待服務端的迴應就可以發送下一個請求,對所有的請求動作來說將會在服務端得到異步,這條請求的鏈路就像是一個請求隊列,所有的請求動作在這裏不會得到同步。

在軟件世界中,我們常說的“同步和異步”,更多是指函數、方法調用的“同步和異步”,也就是“同步調用和異步調用”。

所謂同步調用,在發起一個函數或方法調用時,沒有得到結果之前,該調用就不返回,直到返回結果;異步調用的概念和同步相對,在一個異步調用發起後,被調用者立即返回給調用者,但調用者不能立刻得到結果,被調用者在實際處理這個調用的請求完成後,通過狀態、通知或回調等方式來通知調用者請求處理的結果。

注意 現在清楚同步和異步嗎?簡單地說,同步就是發出一個請求後什麼事都不做,一直等待請求返回後纔會繼續做事;異步就是發出請求後繼續去做其他事,這個請求處理完成後會通知你,這時候就可以處理這個迴應了。

單從任務調用來講,對於同一個任務,異步調用並不能加快這個任務的執行速度和效率,相反會降低執行速度和效率。站在整個系統的層面上考慮,異步調用使得整個系統的性能效率提高,各個組件之間運行配合更加協調。這纔是異步調用的真正優點。

所謂異步輸入輸出機制,是指在進行輸入輸出處理時,不必等到輸入輸出處理完畢才返回。所以異步的同義語是非阻塞(None Blocking)。

網上有很多網友用很通俗的比喻 把同步和異步講解的很透徹 轉過來

舉個例子:普通B/S模式(同步)AJAX技術(異步)

            同步:提交請求->等待服務器處理->處理完畢返回   這個期間客戶端瀏覽器不能幹任何事

            異步:   請求通過事件觸發->服務器處理(這是瀏覽器仍然可以作其他事情)->處理完畢

同步就是你叫我去吃飯,我聽到了就和你去吃飯;如果沒有聽到,你就不停的叫,直到我告訴你聽到了,才一起去吃飯。
異步就是你叫我,然後自己去吃飯,我得到消息後可能立即走,也可能等到下班纔去吃飯。

所以,要我請你吃飯就用同步的方法,要請我吃飯就用異步的方法,這樣你可以省錢。

以通訊爲例

    同步:發送一個請求,等待返回,然後再發送下一個請求

    異步:發送一個請求,不等待返回,隨時可以再發送下一個請求

    併發:同時發送多個請求

答案一:

1、同步執行的話,就是程序會呆板地從頭執行到尾,耗時間的東西不執行完,程序不會繼續往下走,等待時間長的話,有時候就會造成失去響應了。
2、異步的好處,就是把一些東西,特別是耗時間的東西扔到後臺去運行了(doInBackground),程序可以繼續做自己的事情,防止程序卡在那裏失去響應。

答案二:

1、同步是指兩個線程的運行是相關的,其中一個線程要阻塞等待另外一個線程的運行。

2、異步的意思是兩個線程毫無相關,自己運行自己的。

答案三:

1、同步是指:發送方發出數據後,等接收方發回響應以後才發下一個數據包的通訊方式。
2、異步是指:發送方發出數據後,不等接收方發回響應,接着發送下個數據包的通訊方式。
答案四:

1、同步:提交請求->等待服務器處理->處理完畢返回 這個期間客戶端瀏覽器不能幹任何事
2、異步: 請求通過事件觸發->服務器處理(這是瀏覽器仍然可以作其他事情)->處理完畢

答案五:

1、同步就是你叫我去吃飯,我聽到了就和你去吃飯;如果沒有聽到,你就不停的叫,直到我告訴你聽到了,才一起去吃飯。
2、異步就是你叫我,然後自己去吃飯,我得到消息後可能立即走,也可能等到下班纔去吃飯。

  同步就是 下一個線程需要上一個線程的數據  沒有上一個線程下一個線程無法運行
  異步就是  兩個線程可能有數據交換  但是各自獨自運行  相互之間沒有影響。   
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章