同步 非同步 阻塞 非阻塞

2022-09-15 21:48:22 字數 1489 閱讀 7502

一、同步與非同步

(1)所謂同步就是乙個任務的完成需要依賴另外乙個任務時,只有等待被依賴的任務完成後,依賴的任務才能算完成,這是一種可靠的任務序列。

要麼成功都成功,失敗都失敗,兩個任務的狀態可以保持一致。

(2)非同步是不需要等待被依賴的任務完成,只是通知被依賴的任務要完成什麼工作,依賴的任務也立即執行,只要自己完成了整個任務就算完

成了。至於被依賴的任務最終是否真正完成,依賴它的任務無法確定,所以它是不可靠的任務序列。我們可以用打**和發簡訊來很好的比喻同

步與非同步操作。

二、阻塞與非阻塞

阻塞與非阻塞主要是從 cpu 的消耗上來說的

(1)阻塞就是 cpu 停下來等待乙個慢的操作完成 cpu 才接著完成其它的事。

(2)非阻塞就是在這個慢的操作在執行時 cpu 去幹其它別的事,等這個慢的操作完成時,cpu 再接著完成後續的操作。雖然表面上看非阻塞的

方式可以明顯的提高 cpu 的利用率,但是也帶了另外一種後果就是系統的執行緒切換增加。增加的 cpu 使用時間能不能補償系統的切換成本需

要好好評估。

三、兩種的方式的組合

效能分析

同步阻塞

i/o 效能一般很差,cpu 大部分在空閒狀態。

同步非阻塞

在網路 i/o 是長連線,同時傳輸資料也不是很多的情況下,提公升效能非常有效。

要考慮增加的 i/o 效能是否可以補償 cpu 的消耗,也就是系統的瓶頸是在 i/o 還是在 cpu 上。

非同步阻塞

這種方式在分布式資料庫中經常用到,例如往乙個分布式資料庫中寫一條記錄,通常會有乙份是同步阻塞的記錄,

而還有兩至三份是備份記錄會寫到其它機器上,這些備份記錄通常都是採用非同步阻塞的方式寫 i/o。

非同步非阻塞

集群之間的訊息同步機制一般用這種 i/o 組合方式。如 cassandra 的 gossip 通訊機制就是採用非同步非阻塞的方式。

它適合同時要傳多份相同的資料到集群中不同的機器,資料的傳輸量不大,但是卻非常頻繁的情景。

四、例項

io操作分兩個階段

1、等待資料準備好(讀到核心快取)

2、將資料從核心讀到使用者空間(程序空間) 一般來說1花費的時間遠遠大於2。

1上阻塞2上也阻塞是同步阻塞io

1上非阻塞2阻塞的是同步非阻塞io

1、假如我們去飯店點餐,如果我們付了錢後站在收銀台等著飯端上來我們才離開,這就成了同步阻塞了。

2、如果我們付了錢後給你乙個號就可以離開,飯好了老闆會叫號,你過來取。這就是reactor模型。

3、如果我們付了錢後給我乙個號就可以坐到坐位上該幹啥幹啥,飯好了老闆會把飯端上來送給你。這就是proactor模型了。

出處:

深入分析 j**a i/o 的工作機制

參考:tornado: 非同步、非阻塞

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

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

同步 非同步 阻塞 非阻塞

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

同步 非同步 阻塞 非阻塞

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