1、同步、異步有什么區別
在進行網絡編程時,我們通常會看到同步、異步、阻塞、非阻塞四種調用方式以及他們的組合。
其中同步方式、異步方式主要是由客戶端(client)控制的,具體如下:
同步(Sync)
所謂同步,就是發出一個功能調用時,在沒有得到結果之前,該調用就不返回或繼續執行后續操作。
根據這個定義,Java中所有方法都是同步調用,應為必須要等到結果后才會繼續執行。我們在說同步、異步的時候,一般而言是特指那些需要其他端協作或者需要一定時間完成的任務。
簡單來說,同步就是必須一件一件事做,等前一件做完了才能做下一件事。
例如:B/S模式中的表單提交,具體過程是:客戶端提交請求->等待服務器處理->處理完畢返回,在這個過程中客戶端(瀏覽器)不能做其他事。
異步(Async)
異步與同步相對,當一個異步過程調用發出后,調用者在沒有得到結果之前,就可以繼續執行后續操作。當這個調用完成后,一般通過狀態、通知和回調來通知調用者。對於異步調用,調用的返回並不受調用者控制。
對於通知調用者的三種方式,具體如下:
狀態
即監聽被調用者的狀態(輪詢),調用者需要每隔一定時間檢查一次,效率會很低。
通知
當被調用者執行完成后,發出通知告知調用者,無需消耗太多性能。
回調
與通知類似,當被調用者執行完成后,會調用調用者提供的回調函數。
例如:B/S模式中的ajax請求,具體過程是:客戶端發出ajax請求->服務端處理->處理完畢執行客戶端回調,在客戶端(瀏覽器)發出請求后,仍然可以做其他的事。
總結來說,同步和異步的區別:請求發出后,是否需要等待結果,才能繼續執行其他操作。