何謂同步
一句話總結:必須一件一件事做,等前一件做完了才能做下一件事
進程同步:就是在發出一個功能調用時,在沒有得到結果之前,該調用就不返回,這時程序是出於阻塞的,只有接收到返回的值或消息后才往下執行其他的命令。
例子
就是實時處理(如打電話),比如服務器一接收客戶端請求,馬上響應,這樣客戶端可以在最短的時間內得到結果,但是如果多個客戶端,或者一個客戶端發出的請求很頻繁,服務器無法同步處理,就會造成涌塞。
同步如打電話,通信雙方不能斷(我們是同時進行,同步),你一句我一句,這樣的好處是,對方想表達的信息我馬上能收到,但是,我在打着電話,我無法做別的事情。
何謂異步
一句話總結:發布事情命令就行,完事自行通知
當一個異步過程調用發出后,調用者不能立刻得到結果。實際處理這個調用的部件在完成后,通過狀態、通知和回調來通知調用者。
例子
就是分時處理(如收發短信),服務器接收到客戶端請求后並不是立即處理,而是等待服務器比較空閑的時候加以處理,可以避免涌塞。
異步如收發收短信,對比打電話,打電話我一定要在電話的旁邊聽着,保證雙方都在線,而收發短信,對方不用保證此刻我一定在手機旁,同時,我也不用時刻留意手機有沒有來短信。這樣的話,我看着視頻,然后來了短信,我就處理短信(也可以不處理),接着再看視頻。
其他解釋
同步和異步的區別
舉個例子:普通B/S模式(同步)AJAX技術(異步)
同步:提交請求->等待服務器處理->處理完畢返回 這個期間客戶端瀏覽器不能干任何事
異步: 請求通過事件觸發->服務器處理(這是瀏覽器仍然可以作其他事情)->處理完畢
總之:
同步在一定程度上可以看做是單線程,這個線程請求一個方法后就待這個方法給他回復,否則他不往下執行(死心眼)。
異步在一定程度上可以看做是多線程的(廢話,一個線程怎么叫異步),請求一個方法后,就不管了,繼續執行其他的方法。
如有高見,歡迎留言~
本文參考http://blog.csdn.net/tennysonsky/article/details/45111623