一個例子讓你清楚的理解同步,異步,阻塞,非阻塞


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

出場人物:小明,水壺2個(普通水壺,簡稱水壺;會響的水壺,簡稱響水壺)

1.小明把水壺放到火上,然后在那傻等水開。(同步阻塞)

小明覺得自己有點傻。。。。。。

2.小明把水壺放到火上,然后去客廳看電視,時不時的去廚房看看水開沒有。(同步非阻塞)

小明還是覺得自己有點傻,於是變高端了,買了一個水燒開了會響的水壺。水開之后能大聲的發出響聲提示人水開了。。。

3.小明把響水壺放到火上,然后在那傻等水開。(異步阻塞)

小明覺得傻等沒有意義,不應該傻等。。。

4.小明把響水水壺放到火上,去客廳看電視,水壺響之前不再去看它了,響了再去處理。(異步非阻塞)

小明覺得自己聰明了。。。完。。。

 

  所謂同步異步,只是對於水壺而言。普通水壺,同步;響水壺,異步。雖然都能干活,但響水壺可以在自己完工之后,提示小明水開了。這是普通水壺所不能及的。同步只能讓調用者去輪詢自己(情況2中) , 造成小明效率的低下。
  所謂阻塞非阻塞,僅僅對於小明而言。立等(傻等)的小明,阻塞;看電視的小明,非阻塞。情況1和情況3中小明就是阻塞的,有人喊他都不知道。雖然3中響水壺是異步的,可對於立等的小明沒有太大的意義。所以一般異步是配合非阻塞使用的,這樣才能發揮異步的效用。

   

  我們可以分組對比着理解記憶:

    同步異步:同步是指一個時間點只能有一個程序在占用CPU,而異步是指可以有多個程序並行(可以很好的利用操作系統的多核)

    阻塞非阻塞:阻塞是指操作系統發出一個調用/操作之后,必須等到此調用返回結果后才返回。而非阻塞是指在操作系統發出一個調用/操作后,不用等到執行完畢得到結果才返回,而是立即返回,然后可以執行其他的調用/操作(例如:在遇到比較耗時的IO操作時,無需等待此IO操作完成再返回)。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM