同步:所謂的同步就是,就是在發出一個功能調用時,在沒有得到結果之前,該調用就不返回。通俗一點講就是每次有僅只有一件可以乾的事情,只有在這個件事情處理完了,纔可以接其他的事情做。
異步:顧名思義,異步是與同步概念相對的。當一個異步進程調用發出後,調用者不能立刻得到結果。實際處理這個調用的部件在完成後,通過狀態、通知和回調來通知調用者。通俗點說的話就是玩遊戲中,突然有事,離開了下,於是點擊“掛機”,當然“掛機”這種事情還是不能做太多,得有業界良心是吧。
阻塞:阻塞調用容易與同步調用混爲一談。 阻塞調用是指調用結果返回之前,當前線程會被掛起(線程進入非可執行狀態,在這個狀態下,cpu不會給線程分配時間片,即線程暫停運行)。函數只有在得到結果之後纔會返回。所以區別在於同步調用時,該線程還是激活的,一直處於等待結果返回,並處理各種數據信息。
對象的阻塞模式和阻塞函數調用,結果返回會通過select函數通知調用者。
出場人物:老張,水壺兩把(普通水壺,簡稱水壺;會響的水壺,簡稱響水壺)。
1 老張把水壺放到火上,立等水開。(同步阻塞)
老張覺得自己有點傻
2 老張把水壺放到火上,去客廳看電視,時不時去廚房看看水開沒有。(同步非阻塞)
老張還是覺得自己有點傻,於是變高端了,買了把會響笛的那種水壺。水開之後,能大聲發出嘀~~~~的噪音。
3 老張把響水壺放到火上,立等水開。(異步阻塞)
老張覺得這樣傻等意義不大
4 老張把響水壺放到火上,去客廳看電視,水壺響之前不再去看它了,響了再去拿壺。(異步非阻塞)
老張覺得自己聰明瞭。
同步與異步
實際上同步與異步是針對應用程序與內核的交互而言的。同步過程中進程觸發IO操作並等待或者輪詢的去查看IO操作是否完成。異步過程中進程觸發IO操作以後,直接返回,做自己的事情,IO交給內核來處理,完成後內核通知進程IO完成。同步與異步如下圖所示:
阻塞與非阻塞
簡單理解爲需要做一件事能不能立即得到返回應答,如果不能立即獲得返回,需要等待,那就阻塞了,否則就可以理解爲非阻塞。詳細區別如下圖所示:
http://www.cnblogs.com/jogger/archive/2012/09/27/2705386.html
http://www.cnblogs.com/Anker/p/3254269.html