同步阻塞、同步非阻塞、異步阻塞、異步非阻塞
出場人物:小明,水壺2個(普通水壺,簡稱水壺;會響的水壺,簡稱響水壺)
1.小明把水壺放到火上,然后在那傻等水開。(同步阻塞)
小明覺得自己有點傻。。。。。。
2.小明把水壺放到火上,然后去客廳看電視,時不時的去廚房看看水開沒有。(同步非阻塞)
小明還是覺得自己有點傻,於是變高端了,買了一個水燒開了會響的水壺。水開之后能大聲的發出響聲提示人水開了。。。
3.小明把響水壺放到火上,然后在那傻等水開。(異步阻塞)
小明覺得傻等沒有意義,不應該傻等。。。
4.小明把響水水壺放到火上,去客廳看電視,水壺響之前不再去看它了,響了再去處理。(異步非阻塞)
小明覺得自己聰明了。。。完。。。
所謂同步異步,只是對於水壺而言。普通水壺,同步;響水壺,異步。雖然都能干活,但響水壺可以在自己完工之后,提示小明水開了。這是普通水壺所不能及的。同步只能讓調用者去輪詢自己(情況2中) , 造成小明效率的低下。
所謂阻塞非阻塞,僅僅對於小明而言。立等(傻等)的小明,阻塞;看電視的小明,非阻塞。情況1和情況3中小明就是阻塞的,有人喊他都不知道。雖然3中響水壺是異步的,可對於立等的小明沒有太大的意義。所以一般異步是配合非阻塞使用的,這樣才能發揮異步的效用。
我們可以分組對比着理解記憶:
同步異步:同步是指一個時間點只能有一個程序在占用CPU,而異步是指可以有多個程序並行(可以很好的利用操作系統的多核)
阻塞非阻塞:阻塞是指操作系統發出一個調用/操作之后,必須等到此調用返回結果后才返回。而非阻塞是指在操作系統發出一個調用/操作后,不用等到執行完畢得到結果才返回,而是立即返回,然后可以執行其他的調用/操作(例如:在遇到比較耗時的IO操作時,無需等待此IO操作完成再返回)。