實際上同步與非同步是針對應用程式與核心的互動而言的。同步過程中程序觸發io操作並等待(也就是我們說的阻塞)或者輪詢的去檢視io操作(也就是我們說的非阻塞)是否完成。 非同步過程中程序觸發io操作以後,直接返回,做自己的事情,io交給核心來處理,完成後核心通知程序io完成。
同步和非同步針對應用程式來,關注的是程式中間的協作關係;阻塞與非阻塞更關注的是單個程序的執行狀態。
同步有阻塞和非阻塞之分,非同步沒有,它一定是非阻塞的。
阻塞、非阻塞、多路io復用,都是同步io,非同步必定是非阻塞的,所以不存在非同步阻塞和非同步非阻塞的說法。真正的非同步io需要cpu的深度參與。換句話說,只有使用者執行緒在操作io的時候根本不去考慮io的執行全部都交給cpu去完成,而自己只等待乙個完成訊號的時候,才是真正的非同步io。所以,拉乙個子執行緒去輪詢、去死迴圈,或者使用select、poll、epool,都不是非同步。
同步:執行乙個操作之後,程序觸發io操作並等待(也就是我們說的阻塞)或者輪詢的去檢視io操作(也就是我們說的非阻塞)是否完成,等待結果,然後才繼續執行後續的操作。
非同步:執行乙個操作後,可以去執行其他的操作,然後等待通知再回來執行剛才沒執行完的操作。
阻塞:程序給cpu傳達乙個任務之後,一直等待cpu處理完成,然後才執行後面的操作。
非阻塞:程序給cpu傳達任我後,繼續處理後續的操作,隔斷時間再來詢問之前的操作是否完成。這樣的過程其實也叫輪詢。
阻塞,非阻塞,非同步,同步
之前一直對這個概念理不太清楚,今天看到一篇文章感覺不錯 本文 老張愛喝茶,廢話不說,煮開水。出場人物 老張,水壺兩把 普通 水壺,簡稱水壺 會響的水壺,簡稱響水壺 1 老張把水壺放到火上,立等水開。同步阻塞 老張覺得自己有點傻 2 老張把水壺放到火上,去客廳看電視,時不時去廚房看看水開沒有。同步非阻...
同步 非同步 阻塞 非阻塞
故事 老王燒開水。出場人物 老張,水壺兩把 普通水壺,簡稱水壺 會響的水壺,簡稱響水壺 老王想了想,有好幾種等待方式 1.老王用水壺煮水,並且站在那裡,不管水開沒開,每隔一定時間看看水開了沒。同步阻塞 老王想了想,這種方法不夠聰明。2.老王還是用水壺煮水,不再傻傻的站在那裡看水開,跑去寢室上網,但是...
同步 非同步 阻塞 非阻塞
故事 老王燒開水。出場人物 老張,水壺兩把 普通水壺,簡稱水壺 會響的水壺,簡稱響水壺 老王想了想,有好幾種等待方式 1.老王用水壺煮水,並且站在那裡,不管水開沒開,每隔一定時間看看水開了沒。同步阻塞 老王想了想,這種方法不夠聰明。2.老王還是用水壺煮水,不再傻傻的站在那裡看水開,跑去寢室上網,但是...