同步、異步、阻塞、非阻塞

同步:所謂的同步就是就是在發出一個功能調用時,在沒有得到結果之前,該調用就不返回。通俗一點講就是每次有僅只有一件可以乾的事情,只有在這個件事情處理完了,纔可以接其他的事情做。

異步:顧名思義異步是與同步概念相對的。當一個異步進程調用發出後,調用者不能立刻得到結果。實際處理這個調用的部件在完成後,通過狀態、通知和回調來通知調用者。通俗點說的話就是玩遊戲中,突然有事,離開了下,於是點擊“掛機”,當然“掛機”這種事情還是不能做太多,得有業界良心是吧。

阻塞:阻塞調用容易與同步調用混爲一談。  阻塞調用是指調用結果返回之前,當前線程會被掛起(線程進入非可執行狀態,在這個狀態下,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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章