老張愛喝茶招刹,廢話不說恬试,煮開水。出場人物:老張疯暑,水壺兩把(普通水壺训柴,簡稱水壺;會響的水壺妇拯,簡稱響水壺)幻馁。1 老張把水壺放到火上,立等水開越锈。(同步阻塞)老張覺得自己有點(diǎn)傻2 老張把水壺放到火上宣赔,去客廳看電視,時(shí)不時(shí)去廚房看看水開沒有瞪浸。(同步非阻塞)老張還是覺得自己有點(diǎn)傻,于是變高端了吏祸,買了把會響笛的那種水壺对蒲。水開之后,能大聲發(fā)出嘀~~~~的噪音贡翘。3 老張把響水壺放到火上蹈矮,立等水開。(異步阻塞)老張覺得這樣傻等意義不大4 老張把響水壺放到火上鸣驱,去客廳看電視泛鸟,水壺響之前不再去看它了,響了再去拿壺踊东。(異步非阻塞)老張覺得自己聰明了北滥。所謂同步異步,只是對于水壺而言闸翅。普通水壺再芋,同步;響水壺坚冀,異步济赎。雖然都能干活,但響水壺可以在自己完工之后记某,提示老張水開了司训。這是普通水壺所不能及的。同步只能讓調(diào)用者去輪詢自己(情況2中)液南,造成老張效率的低下壳猜。所謂阻塞非阻塞,僅僅對于老張而言贺拣。立等的老張蓖谢,阻塞捂蕴;看電視的老張,非阻塞闪幽。情況1和情況3中老張就是阻塞的啥辨,媳婦喊他都不知道。雖然3中響水壺是異步的盯腌,可對于立等的老張沒有太大的意義溉知。所以一般異步是配合非阻塞使用的,這樣才能發(fā)揮異步的效用腕够。
阻塞级乍,非阻塞:進(jìn)程/線程要訪問的數(shù)據(jù)是否就緒,進(jìn)程/線程是否需要等待帚湘;
同步玫荣,異步:訪問數(shù)據(jù)的方式,同步需要主動讀寫數(shù)據(jù)大诸,在讀寫數(shù)據(jù)的過程中還是會阻塞捅厂;異步只需要I/O操作完成的通知,并不主動讀寫數(shù)據(jù)资柔,由操作系統(tǒng)內(nèi)核完成數(shù)據(jù)的讀寫
簡單舉個(gè)例子(可能也不是很形象)select/poll飯店服務(wù)員(內(nèi)核)告訴飯店老板(用戶程序):”現(xiàn)在有客人結(jié)賬“但是這個(gè)服務(wù)員沒人明確告訴老板焙贷,哪幾桌的客人結(jié)帳。老板得自兒一個(gè)一個(gè)桌子去問:請問是你要結(jié)帳贿堰?epoll飯店服務(wù)員(內(nèi)核)告訴飯店老板(用戶程序):”1,2,5號客人結(jié)賬“老板就可以直接去1,2,5號桌收錢了
https://www.ibm.com/developerworks/cn/linux/l-async/