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