同步 非同步,阻塞 非阻塞

2022-07-08 20:54:15 字數 1321 閱讀 9950

什麼是同步和非同步

同步和非同步是針對應用程式和核心的互動而言的,

同步指的是使用者程序觸發io操作並等待或者輪詢的去檢視io操作是否就緒,而非同步是指使用者程序觸發io操作以後便開始做自己的事情,而當io操作已經完成的時候會得到io完成的通知。

什麼是阻塞和非阻塞

阻塞和非阻塞是針對於程序在訪問資料的時候,根據io操作的就緒狀態來採取的不同方式,阻塞方式下讀取或者寫入函式將一直等待,而非阻塞方式下,讀取或者寫入函式會立即返回乙個狀態值。

同步/非同步與阻塞/非阻塞的區別

同步與非同步:針對資料訪問的方式,程式是主動去詢問作業系統資料準備好了麼,還是作業系統在資料準備好的時候通知程式。

阻塞與非阻塞:針對函式(程式)執行的方式,在io未就緒時,是等待就緒還是直接返回(執行別的操作)。

阻塞與非阻塞的區別:

阻塞是程式在呼叫系統函式io時,在系統執行系統呼叫時由cpu通過輪詢等方式來實現資料的io。

非阻塞是在程式級別通過輪詢/訊號/事件的機制,去檢視io資料是否就緒。

二者的區別其實就是,把阻塞的位置從系統的cpu層面提到了程式層面。

非阻塞與非同步的區別:

非阻塞可以通過輪詢或者訊號/事件機制來實現,其目的是由核心通知我們何時可以啟動乙個i/o操作

而非同步i/o模型是在核心io完成後,由核心通知我們i/o操作已經完成。

乙個網路包從應用程式a發到另一台電腦上的應用程式b,需要經歷:

從a的業務**到a的軟體框架

從a的軟體框架到計算機的作業系統核心

從a所在計算機的核心到網絡卡

從網絡卡經過網線發到交換機等裝置,層層**,到達b所在計算機的網絡卡

從b所在計算機的網絡卡到b所在計算機的核心

從b所在計算機的核心到b的程式的使用者空間

從b的軟體框架到b的業務**

網絡卡<---->網絡卡  同步執行。乙太網是個同步時序邏輯,隨訊號傳輸時鐘,必須兩邊裝置同時就緒了才能開始傳輸資料,這是同步的。

網絡卡<---->核心  非同步執行。核心一般通過緩衝區,使用dma來傳輸資料。cpu通知dma讀取io裝置資料,然後就去做其他的事情,等dma把資料從io裝置中讀到核心記憶體中,去通知cpu已經完成io操作。所以這一步是非同步的。

核心<---->應用程式  同步執行,阻塞/非阻塞。使用者程序/執行緒無法直接讀寫核心資料,需要資料在使用者空間和核心空間搬來搬去。除非個別介面,否則一般是同步的。可以是阻塞或非阻塞,阻塞則一直在等待核心/應用程式把io資料準備好,非阻塞則是直接返回核心/應用程式是否已經準備好資料。

應用程式框架:同步或非同步。框架若使用非同步io,則通常需要應用程式<--->核心之間是非阻塞的。一旦核心<--->應用程式資料io完成,則執行**函式,執行一定的操作。

阻塞,非阻塞,非同步,同步

之前一直對這個概念理不太清楚,今天看到一篇文章感覺不錯 本文 老張愛喝茶,廢話不說,煮開水。出場人物 老張,水壺兩把 普通 水壺,簡稱水壺 會響的水壺,簡稱響水壺 1 老張把水壺放到火上,立等水開。同步阻塞 老張覺得自己有點傻 2 老張把水壺放到火上,去客廳看電視,時不時去廚房看看水開沒有。同步非阻...

同步 非同步 阻塞 非阻塞

故事 老王燒開水。出場人物 老張,水壺兩把 普通水壺,簡稱水壺 會響的水壺,簡稱響水壺 老王想了想,有好幾種等待方式 1.老王用水壺煮水,並且站在那裡,不管水開沒開,每隔一定時間看看水開了沒。同步阻塞 老王想了想,這種方法不夠聰明。2.老王還是用水壺煮水,不再傻傻的站在那裡看水開,跑去寢室上網,但是...

同步 非同步 阻塞 非阻塞

故事 老王燒開水。出場人物 老張,水壺兩把 普通水壺,簡稱水壺 會響的水壺,簡稱響水壺 老王想了想,有好幾種等待方式 1.老王用水壺煮水,並且站在那裡,不管水開沒開,每隔一定時間看看水開了沒。同步阻塞 老王想了想,這種方法不夠聰明。2.老王還是用水壺煮水,不再傻傻的站在那裡看水開,跑去寢室上網,但是...