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

2022-08-30 23:51:36 字數 1317 閱讀 2999

同步:

所謂同步,就是在發出乙個功能呼叫時,在沒有得到結果之前,該呼叫就不返回。也就是必須一件一件事做,等前一件做完了才能做下一件事。

例如普通b/s模式(同步):提交請求->等待伺服器處理->處理完畢返回 這個期間客戶端瀏覽器不能幹任何事

非同步:

非同步的概念和同步相對。當乙個非同步過程呼叫發出後,呼叫者不能立刻得到結果。實際處理這個呼叫的部件在完成後,通過狀態、通知和**來通知呼叫者。

例如 ajax請求(非同步): 請求通過事件觸發->伺服器處理(這是瀏覽器仍然可以作其他事情)->處理完畢

阻塞:

阻塞呼叫是指呼叫結果返回之前,當前執行緒會被掛起(執行緒進入非可執行狀態,在這個狀態下,cpu不會給執行緒分配時間片,即執行緒暫停執行)。函式只有在得到結果之後才會返回。

有人也許會把阻塞呼叫和同步呼叫等同起來,實際上他是不同的。對於同步呼叫來說,很多時候當前執行緒還是啟用的,只是從邏輯上當前函式沒有返回,它還會搶占cpu去執行其他邏輯,也會主動檢測io是否準備好。

非阻塞

非阻塞和阻塞的概念相對應,指在不能立刻得到結果之前,該函式不會阻塞當前執行緒,而會立刻返回。

再簡單點理解就是:

1. 同步,就是我呼叫乙個功能,該功能沒有結束前,我死等結果。

2. 非同步,就是我呼叫乙個功能,不需要知道該功能結果,該功能有結果後通知我(**通知)

3. 阻塞,就是呼叫我(函式),我(函式)沒有接收完資料或者沒有得到結果之前,我不會返回。

4. 非阻塞,就是呼叫我(函式),我(函式)立即返回,通過select通知呼叫者

同步io和非同步io的區別就在於:資料拷貝的時候程序是否阻塞

阻塞io和非阻塞io的區別就在於:應用程式的呼叫是否立即返回

綜上可知,同步和非同步,阻塞和非阻塞,有些混用,其實它們完全不是一回事,而且它們修飾的物件也不相同。

2、五種io模型

在了解了同步與非同步、阻塞與非阻塞概念後,我們來講講linux的五種io模型:

1)阻塞i/o(blocking i/o)

2)非阻塞i/o (nonblocking i/o)

3) i/o復用(select 和poll) (i/o multiplexing)

4)訊號驅動i/o (signal driven i/o (sigio))

5)非同步i/o (asynchronous i/o (the posix aio_functions))

其中前4種都是同步,最後一種才是非同步。

原文:

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

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

同步 非同步 阻塞 非阻塞

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

同步 非同步 阻塞 非阻塞

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